我在代码中添加了对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抱怨我不能满足constarints。
答案 0 :(得分:5)
将对约束的引用保存为
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下面的评论
多数民众赞成。希望它有所帮助