小编典典

NSLayoutConstraints 是可动画的吗?

all

我正在尝试为一些视图设置动画,以便它们被横向的巨型键盘挡住。如果我只是为帧设置动画效果很好,但其他人认为这会适得其反,我应该更新
NSLayoutConstraints。但是,它们似乎不是可动画的。有没有人让他们成功地工作?

//heightFromTop is an NSLayoutConstraint referenced from IB
[UIView animateWithDuration:0.25 animations:^{
    self.heightFromTop.constant= 550.f;
}];

结果是立即跳到有问题的高度。


阅读 62

收藏
2022-07-01

共1个答案

小编典典

只需遵循这个确切的模式:

self.heightFromTop.constant = 550.0f;
[myView setNeedsUpdateConstraints];

[UIView animateWithDuration:0.25f animations:^{
   [myView layoutIfNeeded];
}];

添加到哪里myView的视图在哪里self.heightFromTop。您的视图正在“跳跃”,因为您在动画块中所做的唯一一件事就是设置约束,这不会立即导致布局。在您的代码中,布局发生在您
set 之后的下一个运行循环中heightFromTop.constant,到那时您已经超出了动画块的范围。

在斯威夫特 2 中:

self.heightFromTop.constant = 550
myView.setNeedsUpdateConstraints()

UIView.animateWithDuration(0.25, animations: {
   myView.layoutIfNeeded()
})
2022-07-01