我正试图在swift中随机化一个按钮的前导约束。要激活它,我选择一个按钮。当我第一次选择按钮时,它运行良好,但在此之后的所有时间,它在NSLog中显示了很多错误。这是代码:
let button = UIButton()
@IBAction func start(sender: UIButton) {
let randomNumber = Int(arc4random_uniform(180) + 30)
let cgfloatrandom = CGFloat(randomNumber)
button.hidden = false
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activateConstraints([
button.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: cgfloatrandom),
button.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 390),
button.widthAnchor.constraintEqualToConstant(75),
button.heightAnchor.constraintEqualToConstant(75)
])
}
请帮忙。谢谢。安东
答案 0 :(得分:2)
问题是您是否已经对已经适当约束的按钮添加约束。虽然您可以删除所有约束并重新创建它们,但这样做效率非常低,不建议使用。
我建议只保留对前导约束的引用,这样每次点击按钮修改constant
时都可以访问它。
为此,请为您的前导约束实现一个属性,如下所示:
var leadingConstraint: NSLayoutConstraint!
创建此按钮时,您也希望正确约束它。您可以在此处创建特殊的主要约束。这是在按钮动作功能之外完成的,可能在viewDidLoad
:
button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
//...
leadingConstraint = button.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: 0)
NSLayoutConstraint.activateConstraints([
leadingConstraint,
button.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 390),
button.widthAnchor.constraintEqualToConstant(75),
button.heightAnchor.constraintEqualToConstant(75)
])
现在,当点击按钮时,您不需要设置translatesAutoresizingMaskIntoConstraints
,您只需更新现有主要约束的constant
。
@IBAction func start(sender: UIButton) {
button.hidden = false
let randomNumber = Int(arc4random_uniform(180) + 30)
leadingConstraint.constant = CGFloat(randomNumber)
}