UINavigationController子类和transitionCoordinator

pgb*_*pgb 6 uinavigationcontroller ios

我们使用的自定义子类UINavigationController显示自定义视图,而不是UINavigationBar仅显示第一个视图控制器.

为此,我们覆盖pushViewControllerpopViewController动画出来,在我们的自定义视图.

代码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)

}
Run Code Online (Sandbox Code Playgroud)

基本上,我调用了super实现,所以transitionCoordinator创建了一个(nil直到我调用它),然后我在转换的同时为视图设置动画.

popViewController是相似的,只是反转动画(通过将原点改回零).

我遇到的问题是,第一次按下视图控制器时,动画不会发生.相反,自定义视图的框架会立即更改.

弹出并再次推动时,动画效果很好.

为了使它更奇怪,这在iOS 9和iOS 10模拟器中工作正常,并且仅在iOS 11中失败.

我的代码看起来不错吗?我是否正在与transitioningCoordinator标准互动?我试图了解这是iOS 11问题,​​还是我的代码问题.