繁体   English   中英

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

[英]can't update navigationbar when popping to root view controller

我有一个UITabBar 在一个选项卡中是UINavigationController 假设堆栈中的第二个或第三个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可见? 这似乎很客气。

您应该override rootViewControllerviewWillAppear并从那里override setNavigationBarHidden navigationControllerviewDidDisappear处为nil ,因为它已从导航堆栈中弹出。

如果其他人看到了,我不知道为什么当popToRootViewController()时,在viewWillDisappear之前将self.navigationController的引用设置为nil,但是我发现的解决方法只是存储您自己的引用。

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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM