如何在iPhone中隐藏导航栏?

目前我在iPhone应用程序工作,我有两个屏幕像A和B,A没有导航栏,但B有导航栏。 所以我定了这个

A类:

- (void)viewDidLoad { [super viewDidLoad]; self.title=@"A"; [self.navigationController setNavigationBarHidden:YES]; } -(void)viewWillAppear:(BOOL)animated { [self.navigationController setNavigationBarHidden:YES]; } 

B类:

 - (void)viewDidLoad { [super viewDidLoad]; self.title=@"B"; [self.navigationController setNavigationBarHidden:NO]; } -(void)Previousscreen { [self.navigationController popViewControllerAnimated:YES]; } 

然后我运行应用程序,当我去以前的类像B到A的时候蓝色显示在B类下面附加的屏幕截图供您参考。 如何解决这个问题? 请帮帮我

提前致谢

在这里输入图像说明

你需要使用这个代码:

[navigationController setNavigationBarHidden: YES animated:YES]

– (void)viewWillAppear:(BOOL)animation或更高版本在两个类的视图生命周期。 [避免在– (void)viewDidLoad中执行此操作。]

这里的技巧是使用setNavigationBarHidden: animated方法(代替简单的setNavigationBarHidden:方法)。 这将确保您的用户界面问题消失,并由此产生任何位置问题。

PS检查self.navigationController的值 navigationBarHidden (而不是self.navigationController。navigationBar.hidden ),如果你需要检查你的导航栏是否隐藏,在某些时候,在你的代码。

把它放在Bclass

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

我不认为你是一个隐藏和dynamic显示导航栏时,你推动控制器的行为是支持的。

简单的解决scheme – 隐藏UINavigationController的animation栏,如果你想在一些控制器上显示它,只需添加一个UINavigationBar

使用下面的行来隐藏viewWillAppear: navigationBar viewWillAppear:方法 –

 -(void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden=YES; } 

尝试设置navigationBarHidden:B类的 viewWillDisAppear

Bclass

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

您的代码可以HideUnhide navigationBar Unhide 。 问题是你隐藏在viewWillAppear: Class AnavigationBar viewWillAppear:这只是在出现视图之前调用,所以在加载Class A视图之前, navigationBar每次都被隐藏。
如果我们谈论你的蓝色,我认为这是你的window颜色。 因为在隐藏navigationBar self.view ,你的self.view上面会有一个空间,高度是44.0 。 所以有三个选项来修复它。

  • Class AviewDidAppear:方法中隐藏Class AnavigationBar
  • 设置你的window颜色你想显示。
  • 你可以添加一个图像到window背景,在图像的顶部使navigationBarClass BnavigationBar相同,所以当原来的navigationBar被隐藏时,它会看到。

我最近不得不解决这个问题,我发现有必要立即在pushViewController:setNavigationBarHidden:YES之后立即调用setNavigationBarHidden:NO ,在setNavigationBarHidden:YES之后立即popViewController:在每个调用中都带有animationYES。

所以,推时:

 [nc pushViewController:classBView animated:YES] [nc setNavigationBarHidden:NO animated:YES] 

当popup时:

 [nc popViewControllerAnimated:YES] [nc setNavigationBarHidden:YES animated:YES] 

但就我而言,虽然我可以按照上面的方法推动,但是我不想改变我的B类 ,而是希望它不知道导航栏以前是不是隐藏的(因为它不是我的代码)。 此外,该视图被popup使用正常的后退button,没有显式调用popViewControllerAnimated: 在我的代码中最好的工作是让我的类A成为UINavigationController委托,并在发生popup时将工具栏隐藏在委托方法调用中。

不幸的是,我发现UINavigationControllerDelegate方法不是太有用,当推送我的B类视图时,或者从另一个推入的时候popup回来, willShowViewControllerdidShowViewController被无可区分地调用。

我在https://stackoverflow.com/questions/642312/中关于重写UINavigationController的build议,我做了一些自定义的委托方法,一个是在[super popViewControllerAnimated:]之后调用。 我的子类是在https://gist.github.com/jpmhouston/6118713和委托方法是:

 - (void)navigationController:(UINavigationController *)navigationController isPoppingViewController:(UIViewController *)poppedViewController backTo:(UIViewController *)revealedViewController { if (revealedViewController == self && [poppedViewController isKindOfClass:[MyClassB class]]) { [navigationController setNavigationBarHidden:YES animated:YES]; // ...and more code to run only when going from class B back to class A } } 

我相信有更简单的方法来setNavigationBarHidden:被按下的后退button被调用,但这对我有效。