Xcode中的Autolayout -- 使用"Content Hugging"和"Content Compression Resistance"控制拉伸与压缩

在使用storyboard和Xib进行UI布局的时候,如果同一层级有多个控件,就需要用到"Content Hugging""Content Compression Resistance"这两个属性

Alt
首先,我们得先来了解下另一个属性 intrinsic size(固有尺寸),一个根据自身内容大小而决定的尺寸。我们都知道,UIButton、UILabel 等,在布局时并不需要给它们设置所有constraints,只需要设置 leading space 和 top space 等能决定 X 跟 Y 的constraints 就能够进行布局,这就是它们的intrinsic size在起作用,决定它们的宽高。

然而当所有控件的 intrinsic size 以及所有 constraints 的总和与上层容器的尺寸不匹配时,就需要"Content Hugging""Content Compression Resistance"这两个属性来帮忙了。

“Content Hugging”

"Content Hugging"可以理解为“拉伸抗性”,表现为控件希望自己尽量小,仅够刚好显示出自身的内容即可。当控件们的横向或竖向尺寸总和小于容器尺寸,将会有控件被拉伸,这个属性就是抵抗这一拉伸的能力,优先级高的(数值大)将不被拉伸,优先级低的(数值小)将被拉伸。

在这里插入图片描述
如图所示,我在两个 Label 之间以及他们与边缘之间都加了 constrains ,于是势必有一个将被拉伸,结果抗拉优先级低的被拉伸了。

“Content Compression Resistance”

"Content Compression Resistance"可以理解为“压缩抗性”,表现为控件希望完整的显示出自己的内容。相邻控件由于空间不够的原因势必有控件会被压缩,这个属性就是抵抗这一压缩的能力,于是优先级高(数值大)的控件不会被压缩,优先级低(数值小)的控件将被压缩。
在这里插入图片描述
如图所示,我在两个 Label 之间以及他们与边缘之间设置了 constrains ,屏幕的宽度并不足以在一行中显示所有的文字,于是优先级低的 Label 就被压缩了。所幸我将右边的 Label 设置为可多行显示,于是它就被迫换行了。


版权声明:本文为atholon_fl原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。