使用自动布局对包含子视图的视图进行动画。

7

这是设置:

  • 在Interface Builder上创建了一个UIView,链接到一个IBOutlet变量(_vAbout
  • 一个约束用于我们想要动画的视图,链接到一个IBOutlet变量(_ctrBottomAboutView

我正在使用以下代码进行动画:

_ctrBottomAboutView.constant = -100;
[UIView animateWithDuration:0.5 animations:^{    [_vAbout layoutIfNeeded];
}

我的问题是:每当视图中有子视图时,动画就无法正常工作。然而,如果视图没有子视图,则动画可以正常工作。

你有任何解决方案的想法吗?我尝试过所有方法:添加和删除约束代替修改常量值,在界面构建器中为子视图添加约束...


你尝试过更改动画块内的.constant吗? - gWiz
是的,它具有相同的行为。 - Javier Chávarri
1个回答

4

在从空项目开始进行一些实验之后,我发现以下内容:

假设A是我们要执行动画的视图,B是A的父视图

  • 需要牢记的是,接收layoutIfNeeded消息的视图是拥有约束的视图
  • 对于NSLayoutAttributeWidthNSLayoutAttributeHeight,约束的所有者实际上是A,但是在其他所有情况下,拥有约束的视图是B

但是

  • 如果A没有任何子视图,我们可以在任何时候调用[A layoutIfNeeded],它将起作用
  • 如果A有一个或多个子视图,但我们在viewDidLoad上开始动画,则可以调用[A layoutIfNeeded]并且它将起作用

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接