7

这是设置:

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

我正在使用此代码制作动画:

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

我的问题是:只要视图中有任何子视图,动画就不起作用。但是,如果视图没有子视图,则动画可以正常工作。

您对解决方案有任何想法吗?我已经尝试了一切:添加和删除约束而不是修改常量值,向 Interface Builder 上的子视图添加约束......

4

1 回答 1

4

在从空项目开始的一些实验之后,这就是我发现的:

给定 A 我们想要动画的视图和 B 它的超级视图

  • 请记住,接收layoutIfNeeded消息的视图是拥有约束的视图,这一点非常重要。
  • NSLayoutAttributeWidthNSLayoutAttributeHeight约束的所有者实际上是 A 的情况下,但在所有其他情况下,拥有约束的视图是 B

然而

  • 如果 A 没有任何子视图,我们可以随时调用[A layoutIfNeeded]我们的代码,它会工作
  • 如果 A 有一个或多个子视图,但我们开始动画,viewDidLoad我们可以调用[A layoutIfNeeded]它,它会工作
于 2013-10-16T19:36:11.907 回答