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)