2015-08-19 3 views
1

Я использовал раскадровку для компоновки пользовательской ячейки в виде таблицы. У меня есть пользовательский интерфейс в этой пользовательской ячейке, у которой есть начальный размер x, y 60x7. Эта кнопка пользовательского интерфейса (как и все объекты в раскадровке) использует автоматическую компоновку с классами размера.Изменение размера рамки UIButton при использовании классов классов Требуется автоматическая компоновка

Когда пользователь нажимает кнопку редактирования в представлении, я хотел бы изменить размер UIButton в каждой ячейке равным 60x60. Различные StackOverflow решения для изменения размера UIButton сделать что-то вроде следующего:

CGRect buttonFrame = cell.button1Left.frame; 
buttonFrame.size = CGSizeMake(60, 60); 
cell.button1Left.frame = buttonFrame; 

Но решения также предупреждают, что это не будет работать, если не отключить автоматическую раскладку. Однако, когда я пытаюсь отключить автоматическую раскладку для этого UIButton в пользовательской ячейке, я получаю следующее предупреждение:

enter image description here

Это предупреждение меня пугает. Если я отключу классы размера, это испортит мой макет, отключит мой segues и затруднит будущие изменения? Если да, есть ли другой способ выполнить то, что я пытаюсь?

Бонусный вопрос: возможно ли анимировать изменение размера UIButton (то есть, чтобы оно растягивалось до большего размера)?

ответ

0

Я решил, что лучшим решением для меня было создание еще одного UIButton, который был уже нужного размера. Когда пользователь нажимает кнопку редактирования для представления, я скрываю свернутую UIButton, которая была 60x7. Затем я показываю полный размер UIButton, который равен 60x60. Для того, чтобы оживить переход так, что она выглядит более естественно, я сделал следующее:

 [UIView transitionWithView:cell.pencilButtonLeft 
          duration:0.6 
          options:UIViewAnimationOptionTransitionFlipFromBottom 
         animations:NULL 
         completion:NULL]; 
     cell.pencilButtonLeft.hidden = NO; 

Что касается предупреждающего сообщения, когда я попытался отключить Autosizing, я решил не отключить автоматическое изменение и не отключать классы размеров. Читая его внимательно, я, возможно, был в порядке, пока у меня не было намерения запускать приложение на устройстве, отличном от iPhone. Благодаря @Ptah за предложение по анимации.

1

Попробуйте это:

1) добавить 2 ограничения на кнопке, в раскадровке;

2) создать свойства для них:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *btnHeight; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *btnWidth; 

3) добавить в действие нажатием кнопки:

- (IBAction)buttonPressed:(id)sender { 
    UIButton *btn = (UIButton *)sender; 
    btn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0); 

    self.btnHeight.constant +=50; 
    self.btnWidth.constant +=50; 

    [UIView animateWithDuration: 0.7 animations:^{ 
     [self.view layoutIfNeeded]; 
    }]; 
} 

P.S. Если ваша кнопка находится в центре ячейки, вам также нужно создать верхние и левые ограничения, и если вы делаете высоту и ширину на 50 больше, вам нужно сделать сверху и слева на 25 меньше.

+0

Я получаю суть того, что вы предлагаете, но не совсем согласуется с моей ситуацией. Когда я говорю, что пользователь нажимает кнопку редактирования, ее не такая же кнопка, как та, которая должна быть изменена. Поэтому у меня нет действия, которое идентифицирует кнопку в качестве отправителя. Кроме того, не будет ли ваше предложение требовать подключения IBOutlet на раскадровке? Я попытался установить соединение, но он не распознает подключаемый объект для ячейки. Кажется, что мне нужно, чтобы эти IBOutlets были частью подкласса UIButton, который я пытаюсь изменить. Мысли? – JeffB6688

+0

@ JeffB6688 Вы уверены, что добавляете ограничения на кнопку до поиска подключаемых объектов? Вы можете сохранить ссылки на все свои кнопки в некотором 'NSMuttableArray * myBtns'. И когда будет нажата кнопка редактирования '[myBtns makeObjectsPerformSelector: @selector (..)]; ' – Ptah

+0

Да, у меня уже были ограничения для ширины и высоты для UIButton. Поэтому я не добавил новых. Хотя я не использовал ваш ответ, он дал мне пищу для размышлений (особенно в отношении анимации). Так что спасибо за это. – JeffB6688