隐藏和显示导航栏时,导航栏后退按钮消失

半血17

我正在尝试重新创建类似于Apple News应用程序中针对UINavigationController看到的行为。
我有两个控制器A和B,A嵌入在UINavigationController中,并且与B相连
。A中的导航栏是隐藏的,而B中的导航栏是可见的,并且当从一个移动到另一个时,它的动画效果是正确的。

为此,我将A设置为UINavigationController的委托,并添加

func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    if operation == .push {
        navigationController.setNavigationBarHidden(false, animated: false)
    }
    return nil
}

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    if let coordinator = navigationController.topViewController?.transitionCoordinator {
        if let _ = viewController as? ViewControllerA {
           navigationController.setNavigationBarHidden(true, animated: false)
        }

        coordinator.notifyWhenInteractionChanges { (context) in
            if context.isCancelled == true {
                navigationController.setNavigationBarHidden(false, animated: false)
            }
        }
    }
}

我遇到的问题是向后滑动手势。
当手势开始时,我将隐藏导航栏,以使其在ViewControllerA上不可见,但是如果取消手势,我将再次显示该栏。
不幸的是,当再次显示它时,虽然条本身是可见的,但由于某些原因后退按钮不会重新出现。
你知道那是为什么吗?

问题的一个例子

安德烈·斯洛塔(AndréSlotta)

我认为您在这种情况下不必使用导航控制器委托,而只需在视图控制器的viewWillAppear方法中显示/隐藏导航栏即可

class ViewControllerA: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(true, animated: animated)
    }

}

class ViewControllerB: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

我认为这是较简单的解决方案,不会因缺少后退按钮而造成任何问题。:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章