什么是UIView的内容压缩和内容拥抱?

什么是UIView的内容压缩和内容拥抱? 这些如何与视图的内在内容大小相关?

采取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)] 

如果您不熟悉上面使用的约束的可视化格式语言,则可以在Apple的文档中了解它。 请记住,这些额外的约束是隐含的帮助理解自动布局的行为,并更好地了解其错误信息。

这里是另一个StackOverflow的问题,解决内容压缩阻力和内容拥抱之间的差异: cocoa自动化:内容拥抱vs内容压缩阻力优先级