iOS小知识之SnapKit的抗拉伸抗压缩属性的使用
SnapKit使用的人应该在大多数,可能有大多数人,包括我,之前并没有了解使用到SnapKit的抗拉伸、抗压缩属性,今天我们来看一下如何使用。
HuggingPriority-抗拉伸
在我们平常开发中经常会遇到这种情况,有两个View放在同一行的情况,如果两个View不能够填满整个空间,一般的做法是固定一个View的长度,拉伸另一个View,如果不固定某一View的长度,我们就不能确定哪一个View会被拉伸。
这时我们设置其中不需要拉伸View的HuggingPriority为high,就可以让其不被拉伸。
API:func setContentHuggingPriority( _ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis)
,第一个参数为优先级,第二个参数为水平方向或者竖直方向
如图这种情况,我们可以设置左边Label的抗拉伸强度为defaultHigh,这样在左右两边的Label有空隙的时候,会拉伸右边的Label。实现代码如下:
leftLabel.snp.makeConstraints { make **in** make.top.equalToSuperview().offset(200) make.left.equalToSuperview().offset(20) make.right.equalTo(rightLabel.snp.left).offset(-10).priority(.medium) } leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) rightLabel.snp.makeConstraints { make **in** make.top.equalTo(leftLabel) make.left.equalTo(leftLabel.snp.right).offset(10).priority(.medium) make.right.equalToSuperview().offset(-20) }复制代码
CompressionResistancePriority-抗压缩
与HuggingPriority-抗拉伸相对应的就是CompressionResistancePriority-抗压缩。
API为func setContentCompressionResistancePriority( _ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis)
,第一个参数为优先级,第二个参数为水平方向或者竖直方向.
如下图所示
如上图所示,两个label中,右边label文字过长,在布局中如果不限定某一lable的长度,那其中某一个的label将会被压缩,如果我们设置leftLabel的抗压缩属性CompressionResistancePriority为high,设置rightLabel的CompressionResistancePriority为low,那么就会自动拉伸RightLabel,而leftLabel就会维持原状。实现代码如下
leftLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal) rightLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)复制代码
这样就可以不用限定某一个View的宽度,就可以自动拉伸需要拉伸或者压缩的View。
作者:叶秋主
链接:https://juejin.cn/post/7021501940618133535