UIStackView 具有“换行内容”宽度

Nat*_*ali 2 ios swift uistackview

问题:UIStackView使用 2 个元素 创建水平方向在此输入图像描述

带有“短文本 2 ”的项目宽度应为“换行内容”。带有“长文本 1 ”的项目应填充所有可用空间。

请帮助理解,如何用代码(Swift 语言)创建它?

San*_*ari 5

步骤1:拖动一个StackView,为其添加左、右、上/下约束。(暂时忽略错误)

在此输入图像描述

步骤2:拖动两个标签并将其添加到stackView中(继续忽略警告)

在此输入图像描述

步骤 3:现在您需要解决水平内容歧义,因此将左侧标签的内容拥抱优先级更改为 250,同时将右侧标签的内容拥抱优先级保留为 251

在此输入图像描述

步骤 4:现在出现垂直高度扭曲内容的问题:) 只需选择右侧标签并将其内容压缩阻力设置为 999,同时将左侧标签的内容压缩阻力保留为 751

在此输入图像描述

如果您想知道内容压缩阻力和内容拥抱优先级等发生了什么,请阅读苹果文档以获取更多详细信息

只是为了说明我所做的事情的要点,在 iOS 中,UILabel有隐式内容大小,因此它们根据内容获取大小。堆栈视图也是如此。现在,由于 StackView 必须根据它拥有的两个标签来推断其高度,并且这两个标签具有相同的内容压缩阻力,并且最终具有不同的高度,以便解决混乱,因此它需要您的进一步帮助。您可以指定右标签比左标签更能抵抗其隐式垂直高度的变化。

这意味着现在堆栈视图知道它必须考虑右标签高度来调整其高度,同时它可以覆盖左标签的隐式大小:)

逻辑确认:

在此输入图像描述

在更改右标签字体时,堆栈视图高度会自动增加,并且也会增加左标签的高度:)

编辑OP的评论:

正如OP在评论中建议的那样,conern是宽度而不是高度,步骤4不是必要的,你的问题在步骤3结束时得到解决。关于设置内容拥抱优先级

更改右侧标签内容 UI 更新如下所示

在此输入图像描述 这就是全部:)希望有帮助