拉伸、压缩
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
- 该方法表示当前的Label的内容不想被拉伸
- 默认情况下priority == UILayoutPriorityDefaultHigh(750)
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis
- 该方法表示当前的Label的内容不想被压缩
- 默认情况下priority == UILayoutPriorityDefaultHigh(750)
eg: 如下图所示,两个Label并列在同一排上,左边label自适应,右边label(红色)要使得内容全部展示,如果左边label内容很少,那么右边label随着左边label动,布局代码如下:
//set CompressionResistance ContentHugging
distanceLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
distanceLabel.setContentHuggingPriority(.required, for: .horizontal)
placeLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
placeLabel.setContentHuggingPriority(.required, for: .horizontal)
sizeToFit 和 sizeThatFits的使用
- sizeToFit:会计算出最优的 size 而且会改变自己的size
- sizeThatFits:会计算出最优的 size 但是不会改变 自己的 size
- 其实当调用 UIView 的 sizeToFit 后 会调用 sizeThatFits 方法来计算 UIView 的 bounds.size 然后改变 frame.size