我在代码而不是IB中使用autolayout将自定义按钮添加到UIToolbar。我的问题是关于最佳做法。我是否使用以下代码在工具栏中添加,设置和调整按钮的大小:
(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号?我已经读过自动布局世界中的设置框架是否正常?
答案 0 :(得分:2)
设置视图的框架很好,如果视图的translatesAutoresizingMaskToConstraints
设置为YES
。许多系统视图都使用此设置。此设置是您在代码中创建的视图的默认设置。如果将笔尖设置为使用自动布局,则从笔尖(或故事板)加载的视图将其设置为NO
。
不要尝试在按钮和工具栏之间设置约束。工具栏不使用约束来布置其项目视图。 (您可以通过在调试器中查看视图层次结构来查看此内容。)
只需将addButton.frame.size
或addButton.bounds.size
设置为您希望按钮所具有的尺寸,并将addNewItemButton.width
设置为零。将项目宽度设置为零会告诉工具栏使用按钮自己的大小。工具栏将垂直居中按钮。如果要在按钮之前添加水平间距,请插入另一个UIBarButtonItem
UIBarButtonSystemItemFixedSpace
的{{1}}。