11

我一直在徘徊如何隱藏/刪除/禁用導航控制器中的主要或第一個導航欄,以便我可以把圖像作爲一個整體的背景屏幕,但我找不到任何解決方案。如何隱藏/禁用第一個uinavigationbar?

嘗試隱藏主導航控制器的viewdidLoad中的titleview,但沒有工作。嘗試使用navigationBarHidden,但它隱藏下一堆控制器的整個導航欄。

所以,我不知道如何做到這一點。舉一個例子,我想要有這樣的應用程序 - 大師高爾夫比賽 - http://appshopper.com/sports/the-masters-golf-tournament

如果你看看屏幕1,它的頂部沒有任何導航欄,但是當你觸摸任何選項時,它將推送到一個新的視圖控制器並使導航欄顯示在屏幕3,4和5中。

希望任何人都可以幫助我。謝謝!

回答

18

在我的大多數應用程序中,我有一個自定義的UIViewController類,我從中派生出所有其他自定義控制器。在其中的一些中,我添加了一個像navigationBarInitiallyHidden這樣的方法給其他類可以覆蓋的基類。默認結果取決於應用程序的性質。

在導航控制器的委託中,當顯示實現該方法的控制器時,代理相應地隱藏或顯示導航控制器。由於我使隱藏或顯示動畫,我檢查當前狀態,如果不需要更改,請不要執行任何操作。

你可以在委託方法中做一些簡單的事情。如果顯示的控制器是根控制器,請隱藏導航欄,否則顯示它是否隱藏。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    if (viewController == rootController) { 
    [navigationController setNavigationBarHidden:YES animated:animated]; 
    } else if ([navigationController isNavigationBarHidden]) { 
    [navigationController setNavigationBarHidden:NO animated:animated]; 
    } 
} 
12

您可以隱藏導航欄: [self.navigationController setNavigationBarHidden:YES]; 並要顯示在導航欄再次 [self.navigationController setNavigationBarHidden:NO];

5

隱藏/禁用

self.navigationController.navigationBarHidden = YES; 

顯示/啓用

self.navigationController.navigationBarHidden = NO; 
0

您可以使用波紋管代碼隱藏導航欄。下面的代碼會在viewWillAppear時隱藏導航欄。

目標C

-(void)viewWillAppear:(BOOL)animated 
{ 
     [[self navigationController] setNavigationBarHidden:YES animated:NO]; 
} 

夫特

self.navigationController?.setNavigationBarHidden(true, animated: animated)