如何在iPhone中隐藏导航栏?

时间:2012-10-23 10:06:49

标签: iphone ios uinavigationbar hidden

目前我在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类以下附加屏幕截图供您参考。如何解决这个问题?请帮帮我

先谢谢

enter image description here

7 个答案:

答案 0 :(得分:2)

在B类中设置

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

答案 1 :(得分:1)

您需要使用此代码:

[navigationController setNavigationBarHidden: YES animated:YES]

- (void)viewWillAppear:(BOOL)动画 或稍后的两个类的视图生命周期中。 [避免在 - (void)viewDidLoad 中执行此操作。]

这里的技巧是使用 setNavigationBarHidden:动画方法(代替更简单的 setNavigationBarHidden:方法)。这将确保您的UI问题消失,以及由此产生的任何位置问题。

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

答案 2 :(得分:0)

尝试在 B级<{1}}中设置navigationBarHidden:

B类

viewWillDisAppear

答案 3 :(得分:0)

我支持你在推动控制器时动态显示导航栏时的行为。

简单解决方案 - 隐藏UINavigationController的动画栏,如果您想在某个控制器上显示它,只需向其添加UINavigationBar即可。

答案 4 :(得分:0)

使用以下行隐藏navigationBar方法中的viewWillAppear: -

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

答案 5 :(得分:0)

您的代码适用于HideUnhide navigationBar。问题是,您在Class A中隐藏了navigationBar的{​​{1}},这是在出现视图之前调用的,因此在加载viewWillAppear:视图Class A之前是每次都被隐藏 如果我们谈论你的蓝色,我认为这是你的navigationBar颜色。因为在隐藏window之后,navigationBar上方会有一个空格,其高度 44.0 。所以有三种方法可以修复它。

  • self.view的{​​{1}}方法中隐藏Class A navigationBar
  • Class A颜色设置为您要显示的颜色。
  • 您可以将图片添加到viewDidAppear:背景,其中图片顶部的windowwindow的{​​{1}}相同,所以当原始navigationBar时将隐藏它将会看到。

答案 6 :(得分:0)

我最近必须解决此问题,并且我发现有必要在setNavigationBarHidden:NO之后立即致电pushViewController:并在setNavigationBarHidden:YES之后立即致电popViewController:,动画为YES每次通话。

所以,推动时:

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

当弹出时:

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

但在我的情况下,虽然我可以按上述方式进行推送,但我不想改变我的 B类,而是希望它不知道导航栏以前不是隐藏(因为它不是我的代码)。此外,使用常规的“后退”按钮弹出该视图,没有显式调用popViewControllerAnimated:。在我的代码中最有效的方法是让我的类A 成为UINavigationController委托,并在弹出窗口时隐藏代理方法调用上的工具栏。

不幸的是,我发现UINavigationControllerDelegate方法不太有用,willShowViewController&amp;在推送我的 B类视图或从其推送的另一个视图中弹回它时,didShowViewController被称为无法区分。

我在 https://stackoverflow.com/questions/642312/中提到了有关覆盖UINavigationController的建议,我制作了一些自定义委托方法,一个在[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:会有更简单的方法,但这对我有用。