水平堆栈视图内的标签宽度相等?

Posted

技术标签:

【中文标题】水平堆栈视图内的标签宽度相等?【英文标题】:Labels inside of horizontal stack view are of equal width? 【发布时间】:2018-01-03 15:14:19 【问题描述】:

我有一个包含以下属性的堆栈视图: 轴:垂直 对齐方式:填充 分布:填充

我将其他水平堆栈视图添加到具有以下属性的垂直视图: 轴:水平 对齐方式:FirstBaseline 分布:填充

每个水平堆栈视图都包含两个标签。我希望标签根据其中的文本缩小/扩展它们的宽度。每当我将它们的 numberOfLines 设置为 0 时,两个标签的宽度都相同,并且高度会增加,如果我将 numberOfLines 设置为 1,它们会根据文本扩展/缩小它们的宽度,但如果文本需要多于一行,其余的文字没有出现。非常感谢任何帮助。

【问题讨论】:

将您的代码添加到问题中 到底是什么问题?我不清楚最终的行为与您想要的有何不同。 【参考方案1】:

我有一个类似的问题,水平堆栈视图中有两个标签。 label1 与 numberOfLines = 1 和 label2 是多行的。 (numberOfLines = 0) 两个标签的宽度相同,即使标签 2 的文本更长!

要解决此问题,我必须为 label1 设置宽度限制(基于其当前内容),优先级 = 750(高但不是必需的)。 这样,如果标签的文本很长并且其宽度增长大于该约束,则标签宽度 = 其内容大小。 如果标签宽度小于约束,则标签宽度 = 约束。

See screen shot

【讨论】:

【参考方案2】:

如果您有 2 个标签,行数设置为 1,彼此相邻,试图放入 200 像素的堆栈视图,但每个标签需要 150 像素,您必须解决问题:

哪个标签被压缩,哪个得到它的全宽?

这取决于它们的抗压优先级。默认情况下,自动布局不会对它们进行同等压缩,您需要将它们的约束设置为具有相等的宽度。

如果将行数设置为0UIStackView 似乎很难获得标签的布局约束。如果他们的文本长度不同,那么它似乎就失去了所有意义。在这种情况下,我建议将 2 个标签的宽度设置为相等,除非这对您不起作用。

【讨论】:

【参考方案3】:

当行数为 0 时,Autolayout 仍在努力确定 StackView 内标签的宽度。我的解决方法是设置首选宽度。

【讨论】:

【参考方案4】:

我遇到了类似的问题,我为两个 UILabel 设置了以下属性,它对我有用

label1.setContentHuggingPriority(.required, for: .horizontal)
label1.setContentCompressionResistancePriority(.required, for: .horizontal)

label2.setContentHuggingPriority(.required, for: .horizontal)
label2.setContentCompressionResistancePriority(.required, for: .horizontal)

当 Priority 设置为 .required 时,它会防止任何收缩,因为应该没有更重要的了。

【讨论】:

以上是关于水平堆栈视图内的标签宽度相等?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:无法更改水平堆栈视图中的宽度

为啥图像视图会拉伸以填充 UIStackView 中宽度的一半?

动态宽度大小以适应堆栈视图中的控件

水平堆栈视图中按钮的宽度 - iOS - 故事板

StackView 子视图常量宽度

在 Swift 中以编程方式将视图添加到 stackview