0

对于这样的视图,我的控制器中有这个约束:

someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true

现在我添加了这个约束willLayoutSubviews来更新它的设备旋转。

但它似乎并没有更新,更像是增加了另一个宽度约束,这当然与旧的宽度约束冲突。

现在我真的不知道更新此宽度约束的正确解决方案,但在我看来,我需要先删除约束,然后再次设置它。

如果我这样测试:

someView.constraints.forEach {
    someView.removeContraint($0)
}

这就像预期的那样工作,只是它当然删除了一些我不想删除的约束......所以也不是解决方案。

4

2 回答 2

0

溶胶1

将宽度约束挂钩为IBOutlet并在这样的代码中更改它的常量

self.widthCon.constant = //value
self.view.layoutIfNeeded()

溶胶2

删除带有标识符的约束

someView.constraints.forEach {
   if $0.identifier == "set_id" {
      someView.removeConstraint($0)
      someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
   }
}
于 2018-05-13T21:03:33.317 回答
0

替代解决方案:

如果您有对 of 的引用superviewsomeView那么您可以简单地分配相等的宽度约束,如下所示:

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

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

于 2018-06-02T15:27:05.850 回答