UINavigationController子类和transitionCoordinator

时间:2017-09-22 18:20:55

标签: ios uinavigationcontroller

我们正在使用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)

}

基本上,我调用了super实现,因此创建了transitionCoordinator(直到我调用它为nil),然后我在转换过程中为视图设置动画

popViewController类似,只是反转动画(通过将原点改回零)。

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

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

为了使它更加逼真,这在iOS 9和iOS 10模拟器中运行良好,并且仅在iOS 11中失败。

我的代码看起来不错吗?我与transitioningCoordinator标准的互动方式是什么?我试图了解这是iOS 11问题还是我的代码。

0 个答案:

没有答案