Xcode中的Autolayout -- 使用"Content Hugging"和"Content Compression Resistance"控制拉伸与压缩

在使用storyboard和Xib进行UI布局的时候,如果同一层级有多个控件,就需要用到"Content Hugging""Content Compression Resistance"这两个属性

Alt
首先,我们得先来了解下另一个属性 intrinsic size(固有尺寸),一个根据自身内容大小而决定的尺寸。我们都知道,UIButton、UILabel 等,在布局时并不需要给它们设置所有constraints,只需要设置 leading space 和 top space 等能决定 X 跟 Y 的constraints 就能够进行布局,这就是它们的intrinsic size在起作用,决定它们的宽高。

然而当所有控件的 intrinsic size 以及所有 constraints 的总和与上层容器的尺寸不匹配时,就需要"Content Hugging""Content Compression Resistance"这两个属性来帮忙了。

“Content Hugging”

"Content Hugging"可以理解为“拉伸抗性”,表现为控件希望自己尽量小,仅够刚好显示出自身的内容即可。当控件们的横向或竖向尺寸总和小于容器尺寸,将会有控件被拉伸,这个属性就是抵抗这一拉伸的能力,优先级高的(数值大)将不被拉伸,优先级低的(数值小)将被拉伸。

在这里插入图片描述
如图所示,我在两个 Label 之间以及他们与边缘之间都加了 constrains ,于是势必有一个将被拉伸,结果抗拉优先级低的被拉伸了。

“Content Compression Resistance”

"Content Compression Resistance"可以理解为“压缩抗性”,表现为控件希望完整的显示出自己的内容。相邻控件由于空间不够的原因势必有控件会被压缩,这个属性就是抵抗这一压缩的能力,于是优先级高(数值大)的控件不会被压缩,优先级低(数值小)的控件将被压缩。
在这里插入图片描述
如图所示,我在两个 Label 之间以及他们与边缘之间设置了 constrains ,屏幕的宽度并不足以在一行中显示所有的文字,于是优先级低的 Label 就被压缩了。所幸我将右边的 Label 设置为可多行显示,于是它就被迫换行了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值