簡體   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