Autolayout-UILabel的Hugging&Compression Resistance

UILabel默认Content Hugging Priority大小为250,默认Content Compression Resistance Priority大小为750,所以默认情况下长度总是适配文本长度。

Content Hugging Priority

这里的Hugging字面意思有(v. 拥抱;抱紧;紧贴;缠紧(某物);和……保持接近等)的意思。这段文字有人翻译成内容吸附优先级,也有翻译成抗拉伸优先级。其实我觉得按字面直接翻译也没有问题,其实它想表达的是label大小能够跟着内容变化,实际上就是label的边框一直紧贴着包住里面的内容。下面举个例子说明:


1635521496635.jpg

Content Hugging Priority的值越大,贴紧的优先级就越高。图中左右两边的label的Content Hugging Priority值都为251,比中间的大,所以在间距确定,左右边距确定的情况下,中间的label在内容较少的情况下依然被拉长了,没能贴紧内容。

Content Compression Resistance Priority

有叫内容压缩阻力优先级,也有叫抗压缩能力优先级。这个比较好理解。实际上就是在相互约束的视图中,Content Compression Resistance Priority的值越大,越不容易被压缩。下面来举个例子:


抗压缩.jpg

图中左右两边的Content Compression Resistance Priority值都是750,而中间为749,因此在空间不够的情况下会,两边抗压缩能力强,不被压缩,而中间抗压缩能力弱被压扁了。如果内容变多了,中间就会被压缩的不见了。如下:


抗压缩2.jpg

图中中间的红色图也不见了,左边的Content Compression Resistance Priority的值调整为749之后也被先于绿色label被压缩。为了防止label被压缩至消失,可以设置一个最小width,当然这个width的约束的优先级必须比Content Compression Resistance Priority的值大才行。


抗压缩3.jpg

图中的情况虽然两边的抗压缩能力优先级都为750比中间的749高,但是在中间还有压缩空间的时候右边就被压缩了,这是由于中间的label我们设置了width的约束,Greater Than Or Equal 80,而且优先级为1000,比750高,所以在被压缩到80的时候width的优先级占优势,右边的label被压缩了。

推荐阅读更多精彩内容