如何以编程方式声明一次约束并在 Swift 中需要时调用它?
How do I declare a constraint programmatically once and call it whenever it's needed in Swift?
在 viewDidLoad
中,我声明了一个约束并以这种方式将其添加到 UIViewController
中:
var constraintButtonPlay = NSLayoutConstraint (item: buttonPlay,
attribute: NSLayoutAttribute.Bottom,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 500)
self.view.addConstraint(constraintButtonPlay)
按下按钮时,约束应自行更新。但是,此代码不起作用:
@IBAction func buttonTest(sender: AnyObject) {
var constraintButtonPlay = NSLayoutConstraint (item: buttonPlay,
attribute: NSLayoutAttribute.Bottom,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: -500)
}
现在,我意识到再次声明变量并不是理想的解决方案。那么有没有办法声明一次并在@IBAction
中调用它?
为什么 @IBAction
代码没有更新约束?
您在两个不同的范围内声明了两个局部变量,因此它们实际上是两个不同的对象并且它们根本不相关,即使您为它们指定了相同的名称。
在 viewDidLoad
中创建约束后,尝试将其存储在 属性 中。
在 viewDidLoad
中,我声明了一个约束并以这种方式将其添加到 UIViewController
中:
var constraintButtonPlay = NSLayoutConstraint (item: buttonPlay,
attribute: NSLayoutAttribute.Bottom,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 500)
self.view.addConstraint(constraintButtonPlay)
按下按钮时,约束应自行更新。但是,此代码不起作用:
@IBAction func buttonTest(sender: AnyObject) {
var constraintButtonPlay = NSLayoutConstraint (item: buttonPlay,
attribute: NSLayoutAttribute.Bottom,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: -500)
}
现在,我意识到再次声明变量并不是理想的解决方案。那么有没有办法声明一次并在@IBAction
中调用它?
为什么 @IBAction
代码没有更新约束?
您在两个不同的范围内声明了两个局部变量,因此它们实际上是两个不同的对象并且它们根本不相关,即使您为它们指定了相同的名称。
在 viewDidLoad
中创建约束后,尝试将其存储在 属性 中。