我们正在使用UINavigationController
的自定义子类,它仅为第一个视图控制器显示自定义视图而不是UINavigationBar
。
为此,我们覆盖pushViewController
和popViewController
以在我们的自定义视图中设置动画。
pushViewController
的代码如下:
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
super.pushViewController(viewController, animated: animated)
defer { showTopViewIfNeeded(animated: animated) }
guard let transitionCoordinator = viewController.transitionCoordinator else { return }
transitionCoordinator.animateAlongsideTransition(in: self.view, animation: { (context) in
let fromViewController = context.viewController(forKey: UITransitionContextViewControllerKey.from)
if fromViewController == self.viewControllers.first {
var navigationViewFrame = self.topNavigationView.frame
navigationViewFrame.origin.x -= navigationViewFrame.size.width
self.topNavigationView.frame = navigationViewFrame
}
}, completion:nil)
}
基本上,我调用了super
实现,因此创建了transitionCoordinator
(直到我调用它为nil
),然后我在转换过程中为视图设置动画
popViewController
类似,只是反转动画(通过将原点改回零)。
我遇到的问题是,第一次按下视图控制器时,动画不会发生。相反,自定义视图的框架会立即更改。
弹出并再次推动时,动画效果很好。
为了使它更加逼真,这在iOS 9和iOS 10模拟器中运行良好,并且仅在iOS 11中失败。
我的代码看起来不错吗?我与transitioningCoordinator
标准的互动方式是什么?我试图了解这是iOS 11问题还是我的代码。