Swift 使用函数停用viewdidload中声明的nslayoutconstraint
下面的代码声明了viewdidload中的布局约束。调用函数Selena时,我希望将约束更改为函数Selena中的约束。当我调用函数对象时,我不会改变。它没有效果。我知道我必须取消原始约束Swift 使用函数停用viewdidload中声明的nslayoutconstraint,swift,function,nslayoutconstraint,viewdidload,Swift,Function,Nslayoutconstraint,Viewdidload,下面的代码声明了viewdidload中的布局约束。调用函数Selena时,我希望将约束更改为函数Selena中的约束。当我调用函数对象时,我不会改变。它没有效果。我知道我必须取消原始约束 override func viewDidLoad() { NSLayoutConstraint.activate ([ i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
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 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()
})
}
您可以保留对它们的引用,然后使用
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)
])
}
高度connstraint未更改您可以将其从
viewDidLoad中的数组中取出
i.heightAnchor.constraint(equalToConstant: 450).isActive = true
并将其从selena
功能中删除