【发布时间】:2021-09-27 09:42:29
【问题描述】:
背景:
当旋转设备时,myView 视图变为信箱,而不是调整大小以适应屏幕,见下图。
在情节提要上,设置了centreX 和centreY 约束。
在代码中,width 和 height 约束是通过函数 viewAddConstraints() 设置的,请参见下面的代码。
设备旋转后,我再次调用viewAddConstraints(),但是Xcode给出以下错误:Unable to simultaneously satisfy constraints.
问题:
如何正确移除旧约束,然后在设备旋转时添加新约束?
如何在设备旋转时正确更新视图的约束?
代码:
func viewAddConstraints() {
// Width constraint full width of screen
let myViewWidth = NSLayoutConstraint(item: myView as Any, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: view.bounds.width)
myView.addConstraint(myViewWidth)
// Height constraint full height of screen
let myViewHeight = NSLayoutConstraint(item: myView as Any, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: view.bounds.height)
myView.addConstraint(myViewHeight)
}
图片:
当前情况,视图被错误地加了字。
预期情况,正确调整视图大小。
【问题讨论】:
-
您可以通过保留对现有约束的引用(通常作为实例属性)来移除现有约束,以便您可以停用某些内容。换句话说,不要仅仅创建
myViewWidth和myViewHeight并在激活它们后将它们扔掉,而是存储它们。
标签: ios swift constraints orientation nslayoutconstraint