2017-06-26 67 views
0

我有一個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爲零。所以導航欄保持隱藏狀態。

處理這個問題的正確方法是什麼?我是否應該將導航欄設置爲在根視圖控制器的viewDidAppear中可見?這似乎很難。

+0

您正在使用TabBarController嗎? –

+0

如果您想要隱藏導航欄,爲什麼不直接顯示視圖控制器。 – ovo

+0

@ReinierMelian是的。 – garretriddle

回答

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

你應該在overrideviewWillAppearrootViewControllersetNavigationBarHidden從那裏。 navigationControllernilviewDidDisappear,因爲它已經從導航堆棧中彈出。

相關問題