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

时间:2014-03-24 00:25:32

标签: ios cocoa-touch uiview autolayout

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

1 个答案:

答案 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