我希望我的视图具有以下属性(数字是任意选择的):
前三个要求可以轻松转换为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中的东西。
当然还有其他表达“等于更长的长度”的方法,对吗?
P.S。我没有用snapkit标记它,因为我也会接受使用UILayoutConstraint
API的答案。
答案 0 :(得分: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)
}