2013-06-19 54 views
2

隱藏和顯示UINavigationBar時,我遇到了一些奇怪的行爲。self.navigationController.navigationBar setHidden:當視圖控制器被換出時不工作

在我viewWillAppear方法我打電話這樣的:

self.navigationController.navigationBar.hidden = YES; 

當用戶按下一個按鈕,我打電話這樣的:

self.navigationController.navigationBar.hidden = NO; 

,然後換出使用當前視圖控制器自定義UINavigationController的viewControllers屬性。

這工作正常,但如果我嘗試在viewWillDisappear方法中使用同一行顯示navigationBar,它不起作用。 navigationBar仍然隱藏。

我能夠顯示/使用以下方法隱藏viewWillDisappear狀態欄:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

但顯示/隱藏UINavigationBar的不行!

編輯:另外,self.navigationController.isNavigationBarHidden返回NO後,我試圖顯示viewWillDisappear酒吧,但酒吧仍然隱藏。

任何幫助將不勝感激。謝謝!

+0

你指的是什麼「交換」? – jakenberg

+0

對不起,我不清楚。我的意思是在我的UINavigationController的子類中,我有一個方法來改變視圖控制器。像這樣:'self.viewControllers = @ [viewController1];'其中viewController1是我希望在屏幕上可見的新控制器來替換當前的視圖控制器。 –

回答

10

由於您已將當前視圖控制器交換出堆棧,因此調用viewWillDisappear時,self.navigationController可能是nil

+3

這對我來說很愚蠢。你是對的,換掉製造'self.navigationController'的控制器。我所要做的只是保留對self.navigationController的引用,然後在viewWillDisappear中調用'self.myLocalNavigationControllerReference.navigationBar.hidden = NO;'以再次顯示導航欄。謝謝! –

+1

謝謝,幫助我! – marchinram

1

你最好不要發郵件self.navigationControllerviewWillDisappear急切指出,因爲它可能是nil。我建議編輯navigationBarHidden財產總是從viewWillAppear內,而不是在這個答案https://stackoverflow.com/a/27748007/2248638。我在我的UIViewController基類上有BOOL navigationBarHidden屬性,所以我只需要爲隱藏的視圖控制器設置屬性一次。

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:self.navigationBarHidden animated:animated]; 
} 
相關問題