下面的代码在 viewdidload 中声明布局约束。当调用函数 Selena 时,我希望将约束更改为函数 selena 中的内容。当我调用该函数时,对象不会改变。它没有任何作用。我知道我必须以某种方式取消原来的限制。
override func viewDidLoad() {
NSLayoutConstraint.activate ([
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),
i.widthAnchor.constraint(equalToConstant: 300),
i.heightAnchor.constraint(equalToConstant: 450),
])
}
@objc func selena(){
NSLayoutConstraint.activate ([
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50),
i.widthAnchor.constraint(equalToConstant: 20),
i.heightAnchor.constraint(equalToConstant: 450),
])
}
最佳答案
您可以保留对它们的引用,然后使用停用
var oldCons = [NSLayoutConstraint]()
override func viewDidLoad() {
super.viewDidLoad()
oldCons = [
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),
i.widthAnchor.constraint(equalToConstant: 300),
i.heightAnchor.constraint(equalToConstant: 450)
]
NSLayoutConstraint.activate(oldCons)
}
@objc func selena(){
NSLayoutConstraint.deactivate(oldCons)
NSLayoutConstraint.activate ([
i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50),
i.widthAnchor.constraint(equalToConstant: 20),
i.heightAnchor.constraint(equalToConstant: 450)
])
}
<小时/>
高度约束没有改变,你可以从viewDidLoad
内的数组中获取它
i.heightAnchor.constraint(equalToConstant: 450).isActive = true
并将其从 selena
函数中删除
关于swift - 使用函数停用 viewdidload 中声明的 nslayoutconstraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58459764/