ios - 使用自动布局为包含 subview 的 View 设置动画

标签 ios objective-c animation autolayout

这是设置:

  • 在 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
  • NSLayoutAttributeWidthNSLayoutAttributeHeight 的情况下,约束的所有者实际上是 A,但在所有其他情况下,拥有约束的 View 是 B<

然而

  • 如果 A 没有任何 subview ,我们可以随时在我们的代码上调用 [A layoutIfNeeded],它将起作用
  • 如果 A 有一个或多个 subview ,但我们在 viewDidLoad 上启动动画,我们可以调用 [A layoutIfNeeded] 它将起作用

关于ios - 使用自动布局为包含 subview 的 View 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19359263/

相关文章:

objective-c - 无法正确地对助手应用程序进行代码签名

objective-c - 根据来自另一个NSArray的字符串对NSMutableArray进行排序

ios - 枚举一年中每个月的第 N 天

ios - Foobar-umbrella.h 是做什么用的?

ios - 带有返回值的自定义 UITableViewCell 中的 UIAlertcontroller

objective-c - Objective C 中的二次方程计算

SwiftUI 侧边菜单内容 View 切换动画

ios - iOS7中的SpriteKit animateWithTextures不起作用

ios - 奇怪的动画与 CSStickyHeaderFlowLayout 和 MJRefresh

ios - Tableviews "cellForRowAt"在添加真实数据后永远不会被调用