更新设备方向上的 widthAnchor
Update widthAnchor on Device orientation
我的控制器中有这样一个视图的约束:
someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
现在我在 willLayoutSubviews
中添加了这个约束以在设备旋转时更新它。
但是好像没有更新,更像是又增加了一个宽度约束,当然和旧的宽度约束冲突了。
现在我真的不知道更新此宽度限制的正确解决方案,但在我看来我需要先删除限制然后重新设置它。
如果我这样测试:
someView.constraints.forEach {
someView.removeContraint([=11=])
}
这按预期工作,当然只是它删除了一些我不想删除的约束...所以也不是解决方案。
Sol1
将宽度约束挂钩为 IBOutlet
并像这样在代码中更改它的常量
self.widthCon.constant = //value
self.view.layoutIfNeeded()
Sol2
删除标识符为
的约束
someView.constraints.forEach {
if [=11=].identifier == "set_id" {
someView.removeConstraint([=11=])
someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
}
}
替代解决方案:
如果您有对 someView
的 superview
的引用,那么您可以像这样简单地分配等宽约束:
someView.widthAnchor.constraint(equalTo: superView.widthAnchor)
这样您就可以让 Autolayout 引擎在设备方向改变时自动更新宽度。
我的控制器中有这样一个视图的约束:
someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
现在我在 willLayoutSubviews
中添加了这个约束以在设备旋转时更新它。
但是好像没有更新,更像是又增加了一个宽度约束,当然和旧的宽度约束冲突了。
现在我真的不知道更新此宽度限制的正确解决方案,但在我看来我需要先删除限制然后重新设置它。
如果我这样测试:
someView.constraints.forEach {
someView.removeContraint([=11=])
}
这按预期工作,当然只是它删除了一些我不想删除的约束...所以也不是解决方案。
Sol1
将宽度约束挂钩为 IBOutlet
并像这样在代码中更改它的常量
self.widthCon.constant = //value
self.view.layoutIfNeeded()
Sol2
删除标识符为
的约束someView.constraints.forEach {
if [=11=].identifier == "set_id" {
someView.removeConstraint([=11=])
someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
}
}
替代解决方案:
如果您有对 someView
的 superview
的引用,那么您可以像这样简单地分配等宽约束:
someView.widthAnchor.constraint(equalTo: superView.widthAnchor)
这样您就可以让 Autolayout 引擎在设备方向改变时自动更新宽度。