更新设备方向上的 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
   }
}

替代解决方案:

如果您有对 someViewsuperview 的引用,那么您可以像这样简单地分配等宽约束:

someView.widthAnchor.constraint(equalTo: superView.widthAnchor)

这样您就可以让 Autolayout 引擎在设备方向改变时自动更新宽度。