向其子视图(即 UILabel)添加约束时,无法保持集合视图单元格的固定大小

Posted

技术标签:

【中文标题】向其子视图(即 UILabel)添加约束时,无法保持集合视图单元格的固定大小【英文标题】:Unable to keep a fixed size of collectionview cell when adding constraint to it's subview i.e. a UILabel 【发布时间】:2020-04-14 14:50:27 【问题描述】:

我有一个包含 UILabel 的水平集合视图。我在委托方法中提到了集合视图单元格的大小。

并为该标签添加了前导、尾随、高度和垂直中心约束,如下图所示。

但在输出中,标签的宽度会根据文本和集合视图单元格大小而增加或减少。

我想保持集合视图单元格的大小固定,如委托方法中所述。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

两件事。

首先,听起来您可能正在向标签添加宽度约束,该约束等于标签的文本宽度。该宽度约束将强制单元格扩展以满足前导、尾随和现在的宽度约束的要求。相反,使宽度约束等于标签的宽度。

其次,将标签的 .numberOfRows 属性设置为 0。这将使标签分成多条水平线,而不是变宽。

编辑: 可能有帮助的另一件事是将标签上的 horizontalCompressionResistance 属性调整为 249 或更低。

【讨论】:

我认为是相反的?没有设置宽度约束,所以标签会展开,单元格也会随之展开。通过设置宽度约束,标签将被强制为一定的大小,因此单元格将被强制为标签的大小加上前后边距。 是的,我解释错了。我的意思是你不应该有一个宽度约束等于标签的宽度。你可以有一个宽度限制,但它必须是一个基于单元格宽度的设定值。我已经更新了答案以反映这一点

以上是关于向其子视图(即 UILabel)添加约束时,无法保持集合视图单元格的固定大小的主要内容,如果未能解决你的问题,请参考以下文章

向添加到 UIWindow 的视图添加约束时,为啥无法设置自动布局约束?

使用 Masonry 向视图的子视图添加自动布局约束

以编程方式向 Swift 中的视图添加约束时出错

无法使用约束右对齐视图

当视图未将自身添加到其子视图时,“无法将自身添加为子视图”崩溃(带有示例代码)

当视图宽度发生变化时,如何使 UILabel 正确调整其尺寸?