2013-06-28 1 views
2

Я использую autolayout в коде, а не IB, чтобы добавить пользовательскую кнопку в UIToolbar. Мой вопрос касается лучшей практики. Должен ли я использовать следующий код для добавления, установить и размер кнопку на панели инструментов:Лучшая практика для калибровки UIButtons с автозапуском в коде?

(1)

//------------------------------------------------------- 
// Toobar View 
//------------------------------------------------------- 
UIToolbar *toolbar = [UIToolbar new]; 
UIButton *addButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[addButton setImage:[UIImage imageNamed:@"add_normal"] forState:UIControlStateNormal]; 
[addButton setImage:[UIImage imageNamed:@"add_highlighted"] forState:UIControlStateHighlighted]; 
[addButton addTarget:self action:@selector(addItem:) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *addNewItemButton = [[UIBarButtonItem new] initWithCustomView:addButton]; 
[toolbar setItems:[NSArray arrayWithObject:addNewItemButton] animated:NO]; 

// Add Views to superview 
[superview addSubview:topbarView]; 
[superview addSubview:_tableView]; 
[superview addSubview:toolbar]; 

[toolbar addConstraints:[NSLayoutConstraint 
          constraintsWithVisualFormat:@"H:|-(10)-[addButton(39)]" 
          options:0 
          metrics:nil 
          views:viewsDictionary]]; 

[toolbar addConstraints:[NSLayoutConstraint 
          constraintsWithVisualFormat:@"V:|-(7)-[addButton(29)]" 
          options:0 
          metrics:nil 
          views:viewsDictionary]]; 

(2) Или я размер кнопки, используя другой код, как это установить рамку размер:

CGRect buttonFrame = addButton.frame; 
buttonFrame.size = CGSizeMake(19, 19); 
addButton.frame = buttonFrame; 

Так что номер 1 рекомендуется? Я прочитал, что кадры настроек являются обычным в мире автонастройки?

ответ

2

Установка кадра вид отлично, если вид имеет translatesAutoresizingMaskToConstraints набор для YES. Многие системные представления используют этот параметр. Этот параметр является значением по умолчанию для представлений, созданных в коде. Представления, загруженные из ниба (или раскадровки), имеют значение NO, если в циферблате установлен автоматический макет.

Не пытайтесь установить ограничения между кнопкой и панелью инструментов. Панель инструментов не использует ограничения для размещения своих позиций. (Вы можете увидеть это ковыряться зрения иерархии в отладчике.)

Просто установите addButton.frame.size или addButton.bounds.size к размеру вы хотите, чтобы кнопка есть, и установить addNewItemButton.width к нулю. Установка ширины элемента в ноль указывает панели инструментов на использование собственного размера кнопки. Панель инструментов будет центрировать кнопку по вертикали. Если вы хотите добавить горизонтальный интервал перед кнопкой, введите еще один UIBarButtonItem с типом UIBarButtonSystemItemFixedSpace.

+0

Spot on thanks.I удалил любую ссылку на кнопку из моего кода автоопределения и установил размер рамки. – JMWhittaker