autolayout-hugging-compression

背景
最近公司遇到动态计算cell高度的一个需求,由于有段时间没有写UI相关的东西了,autolayout都有点生疏了,所以复习了一下autolayout的内容,在此记下一些笔记,方便日后查阅。

说到autolayout,重点是理解hugging和compression两个属性,在动态计算cell的高度,特别是UILabel多行计算是常态,那么遇到多个UILabel相互依赖,撑起整个cell的高度,以上两个属性是关键。

Hugging priority :阻止自己大于真实显示尺寸的优先级
Compression Resistance priority :阻止自己小于真实尺寸的优先级

1
2
3
4
5
6
7
8
9
10
11
 ___________________________________________
| _______|_______ ______|_____ |
| | | | | |
|-| label1 |------| label2 |-----|
| |_______________| |____________| |
| | |
| _______|_________ |
| | | |
|-| label3 | |
| |_________________| |
|_________|_________________________________|

例1:水平方向
label1.Hugging@251 > label2.Hugging@250
当label1和label2内容都不够时填充时,label1保持自己本身的尺寸,label2会被优先拉升
label1.compression@751 > label2.compression@750
当label1的内容过宽时,label2的内容会被挤压

例2:垂直方向
label1.Hugging@251 > label3.Hugging@250
同理label3会被优先拉升
label1.Compression@751 > label3.Compression@750
同理lebel3会被优先压缩