iOS 自动布局 关于 '控件拉伸' 或者 '内容压缩'的控制

来源:互联网 发布:php 使用openoffice 编辑:程序博客网 时间:2024/06/05 00:30

在开发过程中,经常碰到如图所示的需求:

并排着三个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];

第一个参数为 优先级的值

第二个参数 为水平 或者 竖直方向。。


原创粉丝点击