在UINavigationController中推送视图控制器时没有动画

时间:2017-01-25 15:19:28

标签: ios iphone swift animation uikit

我的故事板设置为UITabBarController,其中每个标签都包含UINavigationController。对于其中一个UINavigationControllers,在推送或呈现视图控制器时没有过渡动画。

当发生这种情况时,至少有两种不同的情况

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

The Attributes of the segue

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

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

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

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

如果我从另一个视图控制器中呈现modalViewController,则转换会被动画化,这会让我相信正在呈现的根视图控制器中存在错误。

有没有办法禁用我可能会意外触发的UIViewController动画?我已检查并确认没有UIView.setAnimationsEnabled(false)

2 个答案:

答案 0 :(得分:3)

使用self.navigationController?.pushViewController(代替self.present(

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

答案 1 :(得分:2)

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

将重置移至viewDidDisappear(_ animated: Bool)解决了问题。