下面的代码在视图加载中声明了布局约束。当函数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),
])
}发布于 2019-10-19 01:36:15
您可以保存对它们的引用,然后使用deactivate
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函数中删除
发布于 2019-10-19 01:35:41
您需要将约束赋值给变量,并在需要更改它们时更改它们的常量。下面是带有尾部约束的示例。没有必要改变锚,只有常数。你就是这样做的。
var iTrailingConstraint:NSLayoutConstraint?
override func viewDidLoad() {
iTrailingConstraint = i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150).isActive = true
}调用selena时,可以将常量动画到所需的常量。在控制器视图上调用layoutIfNeeded()
@objc func selena(){
UIView.animate(withDuration: 0.5, animations: {
self.iTrailingConstraint?.constant = 50
self.view.layoutIfNeeded()
})
}https://stackoverflow.com/questions/58459764
复制相似问题