重新调整UIButton

时间:2016-09-30 21:49:11

标签: ios uiview uibutton autolayout

我正在以编程方式使用自动布局约束,我想根据其更改的标题重置我的按钮的宽度。假设我没有引用其上设置的旧宽度约束,我该如何重新设置其宽度?在我看来,创建一个新的宽度约束并不起作用 - 我需要停用旧的宽度约束,然后激活新的约束。但我没有提到旧的。

// adding a new constraint
myButton.widthAnchor.constraintEqualToConstant(myNewWidth).active = true

2 个答案:

答案 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))

这是正确的方法。不要激活或停用它。