内容物拥抱和内容物抗压缩性

自动布局使用约束的优先级来解决两个不同约束之间的冲突。 对于具有固有大小的视图,自动布局使用内容拥抱和内容压缩抵抗来解决冲突。

让我们考虑一个例子。
假设我们有一个固定的高度视图,其中有两个标签作为子视图,如下所示。 它可以是标题和内容标签。 标签具有固定的顶部和底部间距,并具有最高优先级。 观察下图,标签内容恰好适合可用空间。 标签的内在内容大小等于可用空间。

内容拥抱

让我们考虑另一个例子。 两个标签都有一行内容。 现在,标签必须超出其固有大小,才能满足标签的约束并适合视图内部。 自动布局是一个冲突。 它必须展开其中一个标签,但无法确定。 因此,它使用内容包含优先级来解决冲突并扩展其中之一。

我为第一个标签指定了最高的内容优先级,以防止其增长。 具有最低优先级的第二个标签会超出其固有内容大小,以容纳剩余空间。

内容拥抱优先级可以设置如下

  titleLabel.setContentHuggingPriority(.defaultHigh,for:.vertical) 
subTitleLabel.setContentHuggingPriority(.defaultLow,for:.vertical)

也可以在情节提要中设置

耐含量压缩

考虑另一个示例,其中两个标签的内容都较大。 现在两个标签都无法在可用空间中显示完整的内容,它不得不缩小其中一个标签,但无法确定它。 自动布局是一个冲突。 因此,它使用内容压缩抵抗来解决冲突并缩小其中之一。

如果需要,我希望标题标签显示完整的文本,而内容标签缩小。 为标题标签设置更高的抗压缩性可防止其收缩。

耐内容压缩性可以如下设置

  titleLabel.setContentCompressionResistancePriority(.defaultHigh,for:.vertical) 
subTitleLabel.setContentCompressionResistancePriority(.defaultLow,for:.vertical)

也可以在情节提要中设置它

今天就这些。 通过https://twitter.com/ideekshi与我联系