2013-06-28 73 views
2

我在代碼中使用autolayout而不是IB將自定義按鈕添加到UIToolbar。我的問題是關於最佳做法。我用下面的代碼添加,設置大小工具欄中的按鈕內:在代碼中使用自動佈局調整UIButton的最佳實踐?

(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.sizeaddButton.bounds.size到你想要的按鈕,有規模,並設置addNewItemButton.width爲零。將項目寬度設置爲零會告訴工具欄使用按鈕自己的大小。工具欄將垂直居中按鈕。如果要在按鈕之前添加水平間距,請插入另一個UIBarButtonItem,其類型爲UIBarButtonSystemItemFixedSpace

+0

點擊thanks.I從我的自動佈局代碼中刪除了對該按鈕的任何引用並設置了幀大小。 – JMWhittaker