2

我在代码而不是 IB 中使用自动布局将自定义按钮添加到 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 号是推荐的方式吗?我读过设置框架在自动布局世界中是一个普通的否?

4

1 回答 1

2

如果视图已translatesAutoresizingMaskToConstraints设置为,则设置视图的框架很好YES。许多系统视图使用此设置。此设置是您在代码中创建的视图的默认设置。NO如果 nib 设置为使用自动布局,则从 nib(或故事板)加载的视图将其设置为。

不要尝试在按钮和工具栏之间设置约束。工具栏不使用约束来布置其项目视图。(您可以通过在调试器中查看视图层次结构来查看这一点。)

只需将addButton.frame.size或设置addButton.bounds.size为您希望按钮具有的大小,然后设置addNewItemButton.width为零。将项目宽度设置为零告诉工具栏使用按钮自己的大小。工具栏将使按钮垂直居中。如果要在按钮之前添加水平间距,请插入另一个UIBarButtonItem类型为UIBarButtonSystemItemFixedSpace.

于 2013-06-28T21:49:12.623 回答