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

时间:2018-01-03 15:14:19

标签: ios swift uilabel uistackview

我有一个包含这些属性的堆栈视图: 轴:垂直 对齐:填充 分配:填写

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

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

3 个答案:

答案 0 :(得分:1)

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

  

哪个标签是压缩的,哪个是全宽?

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

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

答案 1 :(得分:1)

我遇到了类似的问题,水平stackview中有两个标签。 label1,numberOfLines = 1,label2是多行。 (numberOfLines = 0)即使标签2的文本长得多,两个标签的宽度也相等!

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

See screen shot

答案 2 :(得分:0)

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