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

本文介绍了在iOS开发中如何控制控件的拉伸和内容压缩,特别是在并排布局多个Label时。通过调整Hugging Priority(拥抱优先级)和Compression Resistance Priority(压缩抵抗力优先级),可以避免约束冲突并决定哪个Label更不易拉伸或内容优先压缩。例如,设置低的Compression Resistance Priority可以使某个Label的内容在文字过长时优先被压缩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

第一个参数为 优先级的值

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值