在设备方向上更新widthAnchor

时间:2018-05-13 20:58:26

标签: ios swift constraints nslayoutconstraint nslayoutanchor

所以我在我的控制器中有这样的约束:

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

现在我在willLayoutSubviews中添加了这个约束,以便在设备轮换时更新它。

但它似乎没有更新,更像是它增加了另一个宽度约束,因为它与旧的宽度约束相冲突。

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

如果我这样测试这个:

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

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

提前致谢!

2 个答案:

答案 0 :(得分:0)

<强> SOL1

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

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

Sol2

删除标识符为

的约束
someView.constraints.forEach {
   if $0.identifier == "set_id" {
      someView.removeConstraint($0)
      someView.widthAnchor.constraint(equalToConstant: view.bounds.width).isActive = true
   }
}

答案 1 :(得分:0)

替代解决方案:

如果您引用了superview someView,那么您可以简单地指定相等的宽度约束,如下所示:

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

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