【问题标题】:Animate subview on UIViewController viewUIViewController 视图上的动画子视图
【发布时间】:2015-06-28 16:00:58
【问题描述】:

我将 UITableView 作为 UIViewController 的 UIView(父视图)的子视图。当我为我的父视图设置动画时,如下所示:

       UIView.animateWithDuration(duration, animations: {
            viewController?.view.frame = CGRectMake(0,0,320,568)
        }, completion: {_ in

        })

我观察到我的子视图(表格视图)没有动画。我尝试将子视图的自动调整掩码设置为灵活宽度和灵活高度,但没有获得任何成功。任何人都知道它为什么会发生。

【问题讨论】:

  • 你在使用自动布局吗?设置框架没有效果!
  • 是的!我正在使用自动布局,但现在我的表格视图覆盖了整个屏幕,其中前导、尾随、顶部、底部约束常量值设置为“0”

标签: ios objective-c swift ios8


【解决方案1】:

如果您使用自动布局(这是 Xcode 6/7 上的 iOS 8/9 中的默认设置),您需要在 UIView 动画闭包中更改视图的约束,而不是更改框架。

如果您不使用自动布局,那么您可以像上面那样更新框架,但是,我想您是。因此,您需要调用layoutSubviews,然后以编程方式设置新的约束来表示您对布局的期望更改,最后在动画闭包内再次调用layoutSubviews

例子:

func AnimateBackgroundHeight() {
    self.view.layoutSubviews()
    UIView.animateWithDuration(0.5, animations: {
         self.heightCon.constant = 600 // heightCon is the IBOutlet to the constraint
         self.view.layoutSubviews()    
    })
}

【讨论】:

  • 是的!我正在使用自动布局,但现在我的表格视图覆盖了整个屏幕,其中前导、尾随、顶部、底部约束常量值设置为“0”
  • 当然,然后使用我上面显示的示例。您需要更改视图的约束,而不是框架
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多