UIView的内容抗压性和内容拥抱是什么?这些与视图的内在内容大小有何关系?
答案 0 :(得分:94)
取自objc.io的优秀Advanced Auto Layout Toolbox article:
内在内容大小
内在内容大小是视图对其显示的特定内容所具有的大小。例如,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 Autolayout: content hugging vs content compression resistance priority