我正在构建一个应用程序,而我正遇到一个带有约束的奇怪问题。
我正在尝试在故事板中为附加到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
设置:
答案 0 :(得分:1)
在视图上调用layoutIfNeeded只是强制提前更新视图,而不是等待绘制周期的更新,当您为约束设置动画时,您将layoutIfNeeded放置在动画块内,从而动画更改,在第2个如果你没有调用layoutIfNeeded,那么绘图周期就会出现,并在没有动画的情况下更新视图。