我的故事板设置为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)
答案 0 :(得分:3)
使用self.navigationController?.pushViewController(
代替self.present(
您在UINavigationController中设置动画。但是你调用了由UIViewController提供的函数self.present(
。 UIViewController当然无法提供动画。
答案 1 :(得分:2)
在我覆盖的viewWillDisappear(_ animated: Bool)
父视图控制器中,我有一些代码可以重置自定义视图的状态。重置确实会通过CATransaction.setDisableActions(true)
禁用操作,从而禁用过渡动画。
将重置移至viewDidDisappear(_ animated: Bool)
解决了问题。