约束动画问题

时间:2016-02-05 13:46:52

标签: ios objective-c uiview uiviewcontroller nslayoutconstraint

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

我正在尝试在故事板中为附加到UIView的高度约束设置动画,但模拟器会显示一些奇怪的行为。为了调试,我创建了一个全新的iOS 9.2项目并添加了UIButton,为它设置了一个水平引脚和superview顶部约束,将顶部约束链接到我的头文件,将按钮本身链接到{{1 }}

单独调用此代码时:

IBAction

即使不调用- (IBAction)myAction:(id)sender { self.topConstraint.constant += 150.0f; } ,该按钮也会向下捕捉150点。

但是,当我使用此代码时:

[self.view layoutIfNeeded];

按钮向下滑动。

如果没有动画阻止我没有打电话给- (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 设置:

enter image description here

界面构建器中的NSLayoutConstraintenter image description here

1 个答案:

答案 0 :(得分:1)

在视图上调用layoutIfNeeded只是强制提前更新视图,而不是等待绘制周期的更新,当您为约束设置动画时,您将layoutIfNeeded放置在动画块内,从而动画更改,在第2个如果你没有调用layoutIfNeeded,那么绘图周期就会出现,并在没有动画的情况下更新视图。