繁体   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