这是设置:
- 在 Interface Builder 上创建的 UIView,链接到 IBOutlet 变量 (
_vAbout
) - 我们想要动画的这个 View 的约束,链接到 IBOutlet 变量 (
_ctrBottomAboutView
)
我正在使用这段代码来制作动画:
_ctrBottomAboutView.constant = -100;
[UIView animateWithDuration:0.5 animations:^{
[_vAbout layoutIfNeeded];
}
我的问题是:只要 View 中有任何 subview ,动画就不起作用。但是,如果 View 没有 subview ,则动画可以正常工作。
您有什么解决方案吗?我已经尝试了一切:添加和删除约束而不是修改常量值,向 Interface Builder 的 subview 添加约束...
最佳答案
在从一个空项目开始的一些实验之后,这就是我发现的:
给定 A 我们想要动画的 View 和 B 它的父 View
- 请务必记住,接收到
layoutIfNeeded
消息的 View 是拥有约束的 View 。 - 在
NSLayoutAttributeWidth
和NSLayoutAttributeHeight
的情况下,约束的所有者实际上是 A,但在所有其他情况下,拥有约束的 View 是 B<
然而
- 如果 A 没有任何 subview ,我们可以随时在我们的代码上调用
[A layoutIfNeeded]
,它将起作用 - 如果 A 有一个或多个 subview ,但我们在
viewDidLoad
上启动动画,我们可以调用[A layoutIfNeeded]
它将起作用
关于ios - 使用自动布局为包含 subview 的 View 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19359263/