弹出到根视图控制器时无法更新导航栏

时间:2017-06-26 22:26:00

标签: ios swift uinavigationcontroller

我有UITabBar。在一个标签中是UINavigationController。假设堆栈中的第2个或第3个UIViewController具有:

class ChildVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(true, animated: false)
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        navigationController?.setNavigationBarHidden(false, animated: false)
    }
}

如果单击当前选项卡,它将在导航控制器上popToRootViewController()。问题是,在我当前标签的viewWillDisappear(:)中,navigationController为零。所以navigationBar仍然是隐藏的。

处理此问题的正确方法是什么?我是否应该在根视图控制器的viewDidAppear中将导航栏设置为可见?这看起来很糟糕。

2 个答案:

答案 0 :(得分:0)

您应该override viewWillAppear中的rootViewControllersetNavigationBarHiddennavigationController nil位于viewDidDisappear,因为它已从导航堆栈中弹出。

答案 1 :(得分:0)

如果有其他人看到这一点,我不知道为什么self.navigationController viewWillDisappear的引用在您popToRootViewController() class ChildVC: UIViewController { private weak var navCtrl: UINavigationController? override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navCtrl = navigationController navCtrl?.setNavigationBarHidden(true, animated: false) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) navCtrl?.setNavigationBarHidden(false, animated: false) } } 之前设置为nil,但我找到的解决方法只是存储您的自己提到它。

data[2].score