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

Nik*_*Nik 1 objective-c ios autolayout swift

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

func updateViewConstraints() {
    centerYConstraint.constant = 60

    super.updateViewConstraints()
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*hiM 5

IBOutlet在您的viewController.h文件中创建一个:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *nameButtonVerticalConstraint;
Run Code Online (Sandbox Code Playgroud)

现在将其与相关的autolayout约束连接:

在此输入图像描述

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

self.nameButtonVerticalConstraint.constant=25;
Run Code Online (Sandbox Code Playgroud)

如果您想要更平滑的过渡,可以将其放在动画块中:

[UIView animateWithDuration:1.2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    self.nameButtonVerticalConstraint.constant=50;
    [self.view layoutIfNeeded];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)

编辑:这是本文的摘录

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

[viewForUpdate setNeedsUpdateConstraints];
Run Code Online (Sandbox Code Playgroud)

现在,通过调用layoutIfNeeded动画块内部来设置动画.