具有“包装内容”宽度的 UIStackView

Posted

技术标签:

【中文标题】具有“包装内容”宽度的 UIStackView【英文标题】:UIStackView with "wrap content" width 【发布时间】:2018-10-22 08:45:39 【问题描述】:

问题: 使用 2 个元素创建水平 UIStackView

带有“短文本 2”的项目宽度应该是“换行内容”。带有“Long text 1”的项目应填满所有可用空间。

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

【问题讨论】:

ios SDK 没有“物品重量”或“包装内容”的定义。你的问题很混乱。 你可以参考这个---***.com/questions/41436716/… 【参考方案1】:

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

第二步:拖拽两个标签,添加到stackView(继续忽略警告)

第 3 步:现在您需要解决水平内容模糊问题,因此将左侧标签的内容拥抱优先级更改为 250,而将右侧标签的内容拥抱优先级保留为 251

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

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

只是为了简要说明正在做什么,在 iOS 中 UILabels 具有隐式内容大小,因此它们根据内容获取大小。堆栈视图也是如此。现在因为 StackView 必须根据它拥有的两个标签来推断它的高度,并且它们都具有相同的内容压缩阻力并且最终具有不同的高度以解决混淆它寻求您的进一步帮助。您这样做是为了指定与左标签相比,右标签更能抵抗其隐式垂直高度的变化。

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

逻辑确认:

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

编辑 OP 的评论:

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

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

就是这样:) 希望有所帮助

【讨论】:

正是我需要的,但是如何在代码中做呢?谢谢。 @natali : 在编辑中阅读我的描述我已经添加了这就是我可以做的野兽:) 你也可以用代码实现完全相同的事情 感谢您的帮助,但问题出在 item "width" 上,而不是 item "height" @natali : 宽度也很重要 :) 您已将右侧标签内容的拥抱优先级设置为 251,而将左侧标签设置为 250 对吗?这会照顾好它:) 希望“内容拥抱”能解决我的问题。感谢您的指导。

以上是关于具有“包装内容”宽度的 UIStackView的主要内容,如果未能解决你的问题,请参考以下文章

将按钮高度和宽度设置为包装内容并填充父项

操作栏列表导航宽度 - 换行内容

display: inline-block 不会使包装内容的宽度尽可能小

尝试通过使用 UICollectionViewCompositionalLayout 实现固定高度、动态宽度(包装内容)水平 UICollectionView 的单元格

我如何使网格包装器匹配项目的宽度?

使包装内容响应的图像