【问题标题】:In Xcode, set UIButtons the same width except if they truncate their text label在 Xcode 中,将 UIButtons 设置为相同的宽度,除非它们截断其文本标签
【发布时间】:2016-11-25 01:12:05
【问题描述】:

我使用的是 Xcode 8.1。我有一个包含 3 个按钮的水平堆栈视图,间距如图所示(丑陋的颜色只是为了让按钮清晰可见)。

我希望每个按钮都具有相同的宽度,除非按钮的文本无法容纳。下一张图片显示了在较小的手机上发生的情况。请注意“推荐”一词已被截断。

如果文本不适合,我希望该按钮扩大其宽度,直到文本适合,其他 2 个按钮变小但彼此保持相同大小。

通过界面构建​​器的约束和属性,我无法完成这项工作。我尝试了按钮的内容压缩阻力优先级的排列,将所有按钮设置为“等宽”,以及堆栈视图分布属性。例如,设置等宽会导致内容电阻优先级被忽略。

理想情况下,我想制定一个规则,例如“将每个按钮设置为相同的宽度,除非文本标签不适合,在这种情况下,让该按钮变大以适合标签”。你能建议一种方法来实现这一点吗?我猜这超出了界面生成器的范围,需要在代码中实现。

有关此问题答案的更多信息: asmi85 提供了此问题的正确解决方案(谢谢!)。通过降低宽度约束的优先级,它们变为可选约束,如 Apple 自动布局指南 (https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html#//apple_ref/doc/uid/TP40010853-CH9-SW1) 的“约束优先级”部分所述。每个 UIButton 都有 Content Compression Resistance Priority = 750。

在计算解决方案时,自动布局会尝试按照优先级从高到低的顺序满足所有约束。如果它不能满足可选约束,则跳过该约束并继续下一个约束。

当Auto Layout不能完全显示所有按钮标签并且所有按钮宽度相同时,它会跳过它不能满足的宽度规则。

【问题讨论】:

  • 使用 View 代替 StackView 进行嵌入怎么样?

标签: ios xcode


【解决方案1】:

在第一个按钮和第二个按钮之间创建等宽约束,并将优先级设置为低(250),然后在第二个和第三个按钮之间优先级为低,然后在第三个和第一个按钮之间,优先级再次设置为低。

【讨论】:

  • 正是我所做的并且即将回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2011-03-02
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
相关资源
最近更新 更多