我在代码中为UIButton添加了约束:

topBtn.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
  topBtn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 50)
])

以后,如果我单击某个按钮,则希望删除此约束并将其更改为
NSLayoutConstraint.activate([
  topBtn.topAnchor.constraint(equalTo: self.view2.topAnchor, constant: 50)
])

如何实现呢?我努力了
NSLayoutConstraint.deactivate([
  topBtn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 50)
])

但这没有效果,XCode抱怨我不能满足要求。

最佳答案

将对约束的引用另存为

let topConstraint = topBtn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 50)

稍后通过使用激活它
NSLayoutConstraint.activate([topConstraint])

最后,当您需要删除常数时,只需说
button.removeConstraint(topConstraint)

然后添加新的约束为
NSLayoutConstraint.activate([
  topBtn.topAnchor.constraint(equalTo: self.view2.topAnchor, constant: 50)
])
button.layoutIfNeeded()

关于button.layoutIfNeeded的用法,请参考UpHoldoerOfTruth的以下注释

而已。希望能帮助到你

10-07 19:13