【问题标题】:No animation when pushing view controllers in UINavigationController在 UINavigationController 中推送视图控制器时没有动画
【发布时间】:2017-01-25 15:19:27
【问题描述】:

我有一个带有UITabBarController 的情节提要,其中每个选项卡都包含一个UINavigationController。对于UINavigationControllers 之一,在推送或呈现视图控制器时没有过渡动画。

至少有两种不同的情况会发生这种情况

1. 我设置了故事板 segue 来推动子视图控制器。在表格视图中选择单元格时触发 segue。 “动画”框被选中。

尝试以编程方式推送子视图控制器会产生相同的结果。

self.navigationController?.pushViewController(nextController, animated: true)

2. 尝试从导航控制器的根视图控制器模态呈现另一个视图控制器时也没有动画。

modalViewController.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
self.present(modalViewController, animated: true, completion: nil)

如果我从另一个视图控制器呈现modalViewController,则过渡是动画的,这让我相信正在呈现的根视图控制器中有问题。

有没有办法在UIViewController 上禁用我可能不小心触发的动画?我检查并确认没有UIView.setAnimationsEnabled(false)

【问题讨论】:

  • 你能打包上传你的演示项目吗?
  • 视图和视图控制器这两个术语不能互换。我编辑了你的问题标题说“......当推送视图控制器......”
  • @OwenZhao 我无法在演示项目中重现这一点,也无法上传我的真实项目
  • @DuncanC 谢谢。显然我不是在推动观点。
  • 我们几乎不可能从外面知道发生了什么。您看到了一些奇怪的、非标准的行为,并且由于您无法在演示项目中重现它或共享您的真实项目,我不确定我们可以如何提供帮助。您是否尝试过用普通的 UIViewController 替换源视图控制器作为测试?您可能需要这样做,然后开始使用您的视图控制器的特征一次自定义源视图控制器,并反复测试,观察行为是否回来。

标签: ios iphone swift animation uikit


【解决方案1】:

使用self.navigationController?.pushViewController( 而不是self.present(

你在 UINavigationController 中设置了动画。但是你调用了 UIViewController 提供的函数self.present(。 UIViewController 当然不能提供动画。

【讨论】:

  • 我想我不够清楚,有两个不同的例子。一个使用 segue 的推送,一个以编程方式呈现另一个视图控制器。我已经更新了问题以澄清。同样以编程方式推送视图控制器也有相同的结果。
【解决方案2】:

在我重写的父视图控制器的viewWillDisappear(_ animated: Bool) 中,我有一些代码可以重置自定义视图的状态。重置确实通过CATransaction.setDisableActions(true) 禁用了操作,从而禁用了过渡动画。

将重置移动到viewDidDisappear(_ animated: Bool) 解决了这个问题。

【讨论】:

  • 感谢您发布解决方案。这使您的问题线程对遇到相同问题的其他人有用。现在你描述它是有道理的。在您的代码中搜索对setDisableActionsremoveAnimations 的调用将是一个不错的建议。
猜你喜欢
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多