【问题标题】:macOS-Resize many buttons with different width with AutolayoutmacOS-使用自动布局调整许多不同宽度的按钮
【发布时间】:2018-12-13 07:40:30
【问题描述】:

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

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

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

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

有什么想法吗?谢谢

【问题讨论】:

  • 您在正确的轨道上,但我怀疑您需要查看按钮的内在大小。大多数控件视图都有一个 intrinsic 大小,这是视图想要的大小。这会影响内容“拥抱”和“抗压”(CHCR)的优先级;换句话说,自动布局将尝试使每个按钮更宽、更窄或精确到它想要的大小有多难。尝试增加拥抱和压缩优先级,看看它如何影响您的堆栈视图。还要检查堆栈视图属性,因为它的子视图具有 CHCR 优先级覆盖。

标签: macos cocoa autolayout


【解决方案1】:

我通过添加约束程序自己解决了这个问题。

这是我的解决方案:

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

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2021-10-08
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多