小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
SnapKit使用的人应该在大多数,可能有大多数人,包括我,之前并没有配合使用到UIView的抗拉伸、抗压缩属性,今天我们来看一下如何配合使用。
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。