这是设置:
@H_404_2@>在Interface Builder上创建的UIView,链接到IBOutlet变量(_vAbout)
>我们想要动画的这个视图的约束,链接到IBOutlet变量(_ctrBottomAboutView) @H_404_2@我正在使用此代码进行动画处理:
>我们想要动画的这个视图的约束,链接到IBOutlet变量(_ctrBottomAboutView) @H_404_2@我正在使用此代码进行动画处理:
_ctrBottomAboutView.constant = -100; [UIView animateWithDuration:0.5 animations:^{ [_vAbout layoutIfNeeded]; }@H_404_2@我的问题是:只要视图中有任何子视图,动画就不起作用.但是,如果视图没有子项,则动画可以正常工作. @H_404_2@你知道解决方案吗?我已经尝试了一切:添加和删除约束而不是修改常量值,在Interface Builder上为子视图添加约束…
解决方法
经过一些空的项目从地面开始的一些实验后,这是我发现的:
@H_404_2@鉴于我们希望动画的视图和B的超级视图
@H_404_2@>请记住,接收layoutIfNeeded消息的视图是拥有约束的视图,这一点非常重要.
>在NSLayoutAttributeWidth和NSLayoutAttributeHeight的情况下,约束的所有者实际上是A,但在所有其他情况下,拥有约束的视图是B @H_404_2@然而 @H_404_2@>如果A没有任何子视图,我们可以随时在我们的代码上调用[A layoutIfNeeded]并且它可以工作>如果A有一个或多个子视图,但是我们在viewDidLoad上启动动画,我们可以调用[A layoutIfNeeded]它会工作
>在NSLayoutAttributeWidth和NSLayoutAttributeHeight的情况下,约束的所有者实际上是A,但在所有其他情况下,拥有约束的视图是B @H_404_2@然而 @H_404_2@>如果A没有任何子视图,我们可以随时在我们的代码上调用[A layoutIfNeeded]并且它可以工作>如果A有一个或多个子视图,但是我们在viewDidLoad上启动动画,我们可以调用[A layoutIfNeeded]它会工作