macOS使用自动布局调整许多具有不同宽度的按钮的大小

时间:2018-12-13 07:40:31

标签: macos cocoa autolayout

我有一些按钮具有相同的高度和不同的宽度。并且每个按钮的宽度可能会随着用户的操作而改变

我尝试使用NSStackView和两个视图(帮助在超级视图的中心制作StackView。将它们设置为相等的宽度)。看起来像这样:

enter image description here

但是此解决方案无法调整每个按钮的宽度大小,并且我希望我可以设置按钮框架大小并具有相等的分布间距

我将在这些按钮上绘制文本和图像,而不是使用setTitlt:来设置按钮的标题。

有什么想法吗?谢谢

1 个答案:

答案 0 :(得分:0)

我通过添加约束以编程方式自己解决了此问题。

这是我的解决方案:

  1. 不能使用“等于”作为约束来限制按钮的宽度。建议使用“小于或等于”来限制按钮的最大宽度。
  2. 计算所有按钮具有最大状态的所有按钮最大宽度。
  3. 分别在第一个和最后一个按钮(在左侧和右侧)附近添加一个NSView。
  4. 将NSView约束设置为“最接近的邻居的左右空间”为零,宽度和高度可以忽略它。并将这两个NSView都设置为“相等宽度”。
  5. 将所有按钮嵌入到NSStackView中并设置其高度。 enter image description here
  6. 将“将高度等于Superview”约束设置为所有按钮。所有按钮与StackView的高度相同,并且所有按钮的宽度也相同。
  7. 在代码中,您可以在想要调整按钮大小时添加约束。例如。 [NSLayoutConstraint constraintWithItem:item attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:value];