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

smi*_*org 62 cocoa-touch uiview ios autolayout

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

smi*_*org 97

取自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)]
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉上面使用的约束的可视格式语言,可以在Apple的文档中阅读它.请记住,隐式生成这些附加约束有助于理解Auto Layout的行为并更好地理解其错误消息.

这是另一个解决内容压缩阻力和内容拥抱之间差异的StackOverflow问题: Cocoa Autolayout:内容拥抱与内容压缩阻力优先级