约束动画问题

Constraint animation issue

我正在构建一个应用程序,但我遇到了一个奇怪的约束问题。

我正在尝试为故事板中附加到 UIView 的高度约束设置动画,但模拟器显示了一些奇怪的行为。为了进行调试,我创建了一个全新的 iOS 9.2 项目并添加了一个 UIButton,为其设置了一个水平图钉和超级视图顶部约束,将顶部约束链接到我的头文件并将按钮本身链接到一个 IBAction.

单独调用这段代码时:

- (IBAction)myAction:(id)sender {
    self.topConstraint.constant += 150.0f;
}

即使没有调用 [self.view layoutIfNeeded];,按钮也会向下捕捉 150 点。

但是,当我使用这段代码时:

- (IBAction)myAction:(id)sender {
    self.topConstraint.constant += 150.0f;
    [self.view setNeedsUpdateConstraints];
    [UIView animateWithDuration:1 animations:^{
        [self.view layoutIfNeeded];
    }];
}

按钮向下滑动

为什么没有动画块,我不调用layoutIfNeeded就卡在那里?我觉得很奇怪。

这是我的头文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

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

@end

我的顶级 NSLayoutConstraint 设置:

以及界面生成器中的 UIViewController

在视图上调用 layoutIfNeeded 只会强制提前更新视图,而不是等待整个绘图周期的更新,当您为约束设置动画时,您将 layoutIfNeeded 放置在动画块内,从而为更改设置动画,在在您不调用 layoutIfNeeded 的第二个实例中,绘图周期出现并更新没有动画的视图。