【发布时间】:2014-05-01 04:47:40
【问题描述】:
什么是 UIView 的内容压缩阻力和内容拥抱?这些与视图的内在内容大小有何关系?
【问题讨论】:
-
如果您要查找具体值,请参阅stackoverflow.com/questions/36924093/…。
标签: ios cocoa-touch uiview autolayout
什么是 UIView 的内容压缩阻力和内容拥抱?这些与视图的内在内容大小有何关系?
【问题讨论】:
标签: ios cocoa-touch uiview autolayout
取自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
【讨论】: