在开发过程中,经常碰到如图所示的需求:
并排着三个label_0, label_1, label_2..(从左至右),三个label的内容长度都是未知,三个label的之间的距离都是固定值。
正常操作:我们从左至右依次添加label。设定距离左端的距离,居中,最后一个label_2的时候,再多设置一个距离父视图右边的距离。。
这样,约束会飘红,有冲突。而且我们不希望最右边的label_2拉伸,而不是中间的label_1.
所以合理的操作应该是改变控件拉伸难易度的属性。。也就是改变 Hugging priority(hugging:"拥抱",priotity: "优先级")-------->可以按照中文直译的理解方式来理解。。拥抱的优先级越高也就越难分开,即越不容易被拉伸。
关于Hugging priority 系统有三个枚举值250(Low) , 750(High), 1000(Require)..也可以通过手动设置具体的值。
还有一个问题,当文字的长度过长时,我们需要指定某个label的内容优先显示,也就是需要压缩其它label的内容。。假设我们需要压缩中间label_1的内容。
这时候我们只需要像设置 Hugging priority一样设置 Compression Resistance Priority.(Compression: "压缩",Resistance: "阻力"),中文直译也就是"压缩阻力的优先级",系统对应的枚举值同样有三个250(Low) , 750(High), 1000(Require)..
我的理解是这个值越高压缩难度越大,label的内容越难被压缩,也就是文字过长的情况下如果我们指定中间的label_1文字的内容优先被压缩,那么我们只需要设置label_1的compression Resistance Priority的值为Low即可。
如图所示,即可满足需求
这是Xib上的操作,对应代码的API为:
[testLabel setContentCompressionResistancePriority: UILayoutPriorityRequired forAxis: UILayoutConstraintAxisHorizontal];
[testLabel setContentHuggingPriority: UILayoutPriorityRequired forAxis: UILayoutConstraintAxisHorizontal];
第一个参数为 优先级的值
第二个参数 为水平 或者 竖直方向。。
本文介绍了在iOS开发中如何控制控件的拉伸和内容压缩,特别是在并排布局多个Label时。通过调整Hugging Priority(拥抱优先级)和Compression Resistance Priority(压缩抵抗力优先级),可以避免约束冲突并决定哪个Label更不易拉伸或内容优先压缩。例如,设置低的Compression Resistance Priority可以使某个Label的内容在文字过长时优先被压缩。
1547

被折叠的 条评论
为什么被折叠?



