CompressionResistance 和 PriorityHuggingPrioritycontent
- hugging 这个约束条件,会尽可能压缩视图,使其紧贴内容;
- compression resistance 这个约束条件,会尽可能向外扩大视图,是内容尽可能不会被裁剪。
- Content Compression Resistance = 不许挤我!
这个属性的优先级(Priority)越高,越不“容易”被压缩。也就是说,当整体的空间装不下所有的View的时候,Content Compression Resistance优先级越高的,显示的内容越完整。
- Content Hugging = 抱紧!
这个属性的优先级越高,整个View就要越“抱紧”View里面的内容。也就是View的大小不会随着父级View的扩大而扩大。一般用于 UILabel 之类的控件。
比如现在有一个 label 和一个 view,两者水平相邻,我们想要让 label 尺寸根据内容变化,左边跟容器保持固定间距,右侧跟 view 保持固定间距,view 的右侧跟容器的右侧保持固定间距。就像下面这样:
┏━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┏━━━━━━━┓ ┏━━━━━━━┓ ┃
┃ ┃ label ┃ ┃ view ┃ ┃
┃ ┗━━━━━━━┛ ┗━━━━━━━┛ ┃
┗━━━━━━━━━━━━━━━━━━━━━━┛
实现代码如下:
// 1. 给 label 添加约束
// ...
// 2. 设置 label 的 Hugging Priority,使其宽度跟文字内容一样宽
[label setContentHuggingPriority:UILayoutPriorityRequired
forAxis:UILayoutConstraintAxisHorizontal];
// 3. 给 view 添加约束
// ...
1.自适应宽度,则不设置label的宽度
2.进行label的多行显示设置时,主要是如下三个方面的设置
1、@property(nonatomic)CGFloat preferredMaxLayoutWidth;
2、- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis;
3、@property(nonatomic) NSInteger numberOfLines;
label.preferredMaxLayoutWidth = width;
//设置huggingPriority
[label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
//设置换行
label.numberOfLines = 0;