AutoLayout中的Content Hugging priority与Content Compression Resistance Priority

含义

  • Content Hugging priority :直译成中文就是“内容拥抱优先级”,从字面意思上来看就是两个视图,谁的“内容拥抱优先级”高,谁就优先环绕其内容。
  • Content Compression Resistance Priority:直译成中文就是“内容压缩阻力优先级”。也就是视图的“内容压缩阻力优先级”越大,那么该视图中的内容越难被压缩。而该优先级小的视图,则内容优先被压缩。

Content Hugging priority

假设有一个需求:

两个Label并排显示,内容长度不定,优先显示Label1内容,但是Label1有一个最大宽度,内容超过该宽度时内容被压缩,剩余部分显示Label2。Label1宽度没达到最大值时,剩下的部分仍然显示Label2,Label2内容显示不全的也会被压缩。

设置优先级:


Label1约束
Label1约束
Label1约束

接下来设置Label2约束,left以Label1为基准,right以父视图为基准


Label2约束

这个时候会报一个约束冲突的错误,因为两个Label的宽度不能确定,查看描述:


约束冲突提示

这里建议的做法是将Label2的Content Hugging priority设置得比Lable1更低,也就是251以下。那么这个时候Label1的Content Hugging priority更高,能够优先根据内容确定宽度,Label2也随之能够确定宽度。

效果:


Content Hugging priority效果

Content Compression Resistance Priority

从字面意思上看,该优先级越大则说明内容压缩阻力越大,也就是说内容越难被压缩。当两个Label并排显示,并且屏幕不足以显示两个Label的所有内容时,则会优先压缩“内容压缩阻力优先级”小的Label。

约束设置就不再赘述了

这里通过一个Switch设置Content Compression Resistance Priority的优先级

- (IBAction)setPriority:(UISwitch *)sender {
    if (sender.isOn) {
        [self.bottomRightLabel setContentCompressionResistancePriority:755 forAxis:UILayoutConstraintAxisHorizontal];
    }else {
        [self.bottomRightLabel setContentCompressionResistancePriority:745 forAxis:UILayoutConstraintAxisHorizontal];
    }
}

效果:


Content Compression Resistance Priority效果

开关打开时,右边的Content Compression Resistance Priority更高,因此左边的Label内容优先被压缩,同理关闭时,右边的Content Compression Resistance Priority更低,右边的先被压缩。

Demo

你可能感兴趣的:(AutoLayout中的Content Hugging priority与Content Compression Resistance Priority)