簡體   English   中英

如何添加約束,以便在方向改變時視圖的尺寸不會改變?

[英]How do I add constraints so that my view's dimensions do not change when the orientation changes?

我希望我的視圖具有以下屬性(數字是任意選擇的):

  • 寬度等於高度除以1.2
  • 停留在屏幕的右下角
  • 縱向時,高度為屏幕高度的1/7
  • 方向改變時寬度和高度不變

前三個要求可以輕松轉換為UILayoutConstraint 我之所以使用SnapKit來做,只是因為它讀起來更清晰。 即使您以前從未使用過SnapKit,也應該明白我的意思。

let myView = UIView(frame: .zero)
myView.backgroundColor = .green
view.addSubview(myView)
myView.snp.makeConstraints { (make) in
    make.right.equalToSuperview().offset(-8)
    make.bottom.equalToSuperview().offset(-8)
    make.width.equalTo(myView.snp.height).dividedBy(1.2)
    make.height.equalTo(view.snp.height).dividedBy(7) // *
}

問題是最后一個要點。 當我將設備從縱向旋轉到橫向時,旋轉之前的原始寬度變為旋轉之后的高度。 結果導致我的視​​線變小。

基本上,我想用以下內容替換標有*的約束:

make.height.equalTo(max(view.snp.height, view.snp.width)).dividedBy(7)

但我認為max(a, b)在SnapKit或UILayoutConstraint API中不存在。

當然還有其他表達方式“等於更長的長度”,對嗎?

PS:我沒有使用對此進行標記,因為我還將接受使用UILayoutConstraint API的答案。

看來您有2個選擇:

  1. 硬編碼高度值。
  2. 嘗試使用nativeBounds

該矩形基於設備的縱向放置。 該值不會隨着設備旋轉而改變。

在這種情況下, height始終為縱向模式。

myView.snp.makeConstraints { make in
    make.right.bottom.equalToSuperview().offset(-8)
    let screenHeight = UIScreen.main.nativeBounds.height / UIScreen.main.nativeScale
    let height = screenHeight / 7
    make.width.equalTo(height).dividedBy(1.2)
    make.height.equalTo(height)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM