在开发过程中,经常碰到如图所示的需求:
并排着三个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_1的Hugging priority设为750(High),同样的将右边的label_2对应的设为250(Low),即可满足需求。具体效果如下图所示。。。。
还有一个问题,当文字的长度过长时,我们需要指定某个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];
第一个参数为 优先级的值
第二个参数 为水平 或者 竖直方向。。