提问者:小点点

一个UIView的内容抗压缩性和内容拥抱性是什么?


一个UIView的内容抗压缩性和内容拥抱性是什么?这些与视图的内在内容大小有什么关系?


共1个答案

匿名用户

摘自objc.io的优秀高级自动布局工具箱文章:

内在内容大小

内部内容大小是视图所显示的特定内容的大小。例如,UILabel具有基于字体的首选高度,以及基于字体和它显示的文本的首选宽度。UIProgressView只有基于其艺术品的首选高度,但没有首选宽度。普通UIView既没有首选的宽度也没有首选的高度。

抗压性和内容拥抱

每个视图都具有为两个维度分配的内容抗压缩优先级和内容拥抱优先级。这些属性仅对定义了内部内容大小的视图生效,否则就没有定义的内容大小可以抵抗压缩或被拥抱。

在幕后,内部内容大小和这些优先级值被转化为约束。对于内在内容大小为{100,30,水平/垂直抗压缩优先级为750,水平/垂直内容拥抱优先级为250的标签,将生成四个约束:

H:[label(<=100@250)] 
H:[label(>=100@750)]
V:[label(<=30@250)]
V:[label(>=30@750)]

如果您不熟悉上述约束的可视化格式语言,可以阅读Apples文档。记住这些附加约束是隐式生成的,有助于理解Auto Layouts的行为,并更好地理解其错误消息。

这里有另一个堆栈溢出问题,它解决了内容抗压缩性和抗压缩性之间的差异;内容拥抱:可可自动版式:内容拥抱vs内容抗压缩优先级