如何以编程方式更新约束?

时间:2015-04-06 12:07:39

标签: ios objective-c swift autolayout

我想在代码中以编程方式更新约束。我已将它们添加到storyboard控制器中。我为约束制作IBOutlet并连接它们。我在updateViewConstrains()中添加了值,但它无效:

func updateViewConstraints() {
    centerYConstraint.constant = 60

    super.updateViewConstraints()
}

4 个答案:

答案 0 :(得分:5)

IBOutlet文件中创建viewController.h

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *nameButtonVerticalConstraint;

现在将其与相关的自动布局约束连接起来:

enter image description here

现在您可以像这样简单地更改约束:

self.nameButtonVerticalConstraint.constant=25;

如果你想要更平滑的过渡,你可以把它放在一个动画块中:

[UIView animateWithDuration:1.2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    self.nameButtonVerticalConstraint.constant=50;
    [self.view layoutIfNeeded];
} completion:nil];

编辑:这里摘自this文章

如果由于更新上述约束而影响其他约束,则还必须调用以下内容:

[viewForUpdate setNeedsUpdateConstraints];

现在,通过在动画块中调用layoutIfNeeded来为视图设置动画。

答案 1 :(得分:2)

尝试myConstraintOutlet.constant = newValue;

答案 2 :(得分:1)

您可以更新布局约束的constant属性。

答案 3 :(得分:0)

对于单个约束,可以很容易地通过更改其常量值来进行更新。如何更改多个约束?

在这种情况下,最好采用这样的方式。

将约束存储在数组中。

for