iOS小知識之SnapKit的抗拉伸抗壓縮屬性的使用

語言: CN / TW / HK

小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。

SnapKit使用的人應該在大多數,可能有大多數人,包括我,之前並沒有瞭解使用到SnapKit的抗拉伸、抗壓縮屬性,今天我們來看一下如何使用。

HuggingPriority-抗拉伸

在我們平常開發中經常會遇到這種情況,有兩個View放在同一行的情況,如果兩個View不能夠填滿整個空間,一般的做法是固定一個View的長度,拉伸另一個View,如果不固定某一View的長度,我們就不能確定哪一個View會被拉伸。\ 這時我們設定其中不需要拉伸View的HuggingPriority為high,就可以讓其不被拉伸。 API:func setContentHuggingPriority( _ priority: UILayoutPriority, for axis: NSLayoutConstraint.Axis),第一個引數為優先順序,第二個引數為水平方向或者豎直方向

截圖2021-10-19 下午4.03.15.png

如圖這種情況,我們可以設定左邊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),第一個引數為優先順序,第二個引數為水平方向或者豎直方向.\ 如下圖所示

截圖2021-10-19 下午4.13.07.png

如上圖所示,兩個label中,右邊label文字過長,在佈局中如果不限定某一lable的長度,那其中某一個的label將會被壓縮,如果我們設定leftLabel的抗壓縮屬性CompressionResistancePriority為high,設定rightLabel的CompressionResistancePriority為low,那麼就會自動拉伸RightLabel,而leftLabel就會維持原狀。實現程式碼如下

``` leftLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)

rightLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) ``` 這樣就可以不用限定某一個View的寬度,就可以自動拉伸需要拉伸或者壓縮的View。