我正在尝试为一些视图设置动画,以便它们被横向的巨型键盘挡住。如果我只是为帧设置动画效果很好,但其他人认为这会适得其反,我应该更新 NSLayoutConstraints。但是,它们似乎不是可动画的。有没有人让他们成功地工作?
//heightFromTop is an NSLayoutConstraint referenced from IB [UIView animateWithDuration:0.25 animations:^{ self.heightFromTop.constant= 550.f; }];
结果是立即跳到有问题的高度。
只需遵循这个确切的模式:
self.heightFromTop.constant = 550.0f; [myView setNeedsUpdateConstraints]; [UIView animateWithDuration:0.25f animations:^{ [myView layoutIfNeeded]; }];
添加到哪里myView的视图在哪里self.heightFromTop。您的视图正在“跳跃”,因为您在动画块中所做的唯一一件事就是设置约束,这不会立即导致布局。在您的代码中,布局发生在您 set 之后的下一个运行循环中heightFromTop.constant,到那时您已经超出了动画块的范围。
myView
self.heightFromTop
heightFromTop.constant
在斯威夫特 2 中:
self.heightFromTop.constant = 550 myView.setNeedsUpdateConstraints() UIView.animateWithDuration(0.25, animations: { myView.layoutIfNeeded() })