我正在以编程方式使用自动布局约束,我想根据其更改的标题重置我的按钮的宽度。假设我没有引用其上设置的旧宽度约束,我该如何重新设置其宽度?在我看来,创建一个新的宽度约束并不起作用 - 我需要停用旧的宽度约束,然后激活新的约束。但我没有提到旧的。
// adding a new constraint
myButton.widthAnchor.constraintEqualToConstant(myNewWidth).active = true
答案 0 :(得分:1)
在您的班级中创建NSLayoutConstraint属性。以编程方式设置按钮的宽度约束时,请为此属性指定新约束。
然后,当您需要更新约束时,只需执行此操作
myWidthConstraint.constant = newValue
答案 1 :(得分:1)
你可以尝试这个。我还没有尝试过。首先,您需要过滤约束或全部循环并找到所需的约束。为此你可以使用它。
var constraint: NSLayoutConstraint! = nil
let constraints = myButton.constraintsAffectingLayoutForAxis(UILayoutConstraintAxis.Horizontal)
或者这会得到你所有的限制。
var constraint: NSLayoutConstraint! = nil
然后你需要遍历它们并找到所需的一个。
for const in myButton.constraints {
if const.firstAttribute == NSLayoutAttribute.Width {
constraint = const
break
}
}
宽度约束的第一个属性始终设置为“宽度”,您还可以使用if子句为应用约束的项目添加如下所示的附加检查
const.firstItem as! NSObject == myButton
因为宽度约束的第一项本身就是。 尝试是否有效。如果你找到它,我建议删除特定约束并添加新约束。在下面的项目上添加宽度约束是代码。假设您想要的宽度为50像素。
myButton.addConstraint(NSLayoutConstraint(item: myButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50.0))
这是正确的方法。不要激活或停用它。