【问题标题】:How to hide navigation bar in iPhone?如何在 iPhone 中隐藏导航栏?
【发布时间】:2012-10-23 10:06:49
【问题描述】:

目前我正在使用 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 课中显示蓝色,下面附上屏幕截图供您参考。如何解决这个问题?请帮帮我

提前致谢

【问题讨论】:

  • [self.navigationController setNavigationBarHidden:NO];在 viewWillAppear 中也设置这条线。
  • 你想显示哪种颜色?

标签: iphone ios uinavigationbar hidden


【解决方案1】:

在B类中设置

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

【讨论】:

  • becoz class b 导航栏也隐藏
  • 你想要它在B,然后设置NO。
  • 我又读了一遍你的问题,你想隐藏在A班而不是B班,即使他们回来了。
  • 是的,没错,但是当用户从B到A的上一个班级时,蓝色图像会在几分之一秒内显示出来,那么如何解决这个问题呢?在上面的屏幕截图中显示
【解决方案2】:

您需要使用此代码:

[navigationController setNavigationBarHidden: YES animated:YES]

- (void)viewWillAppear:(BOOL)animated 或两个类的视图生命周期的后期。 [避免在 - (void)viewDidLoad 中这样做。]

这里的技巧在于使用 setNavigationBarHidden:animated: 方法(代替更简单的 setNavigationBarHidden: 方法)。这将确保您的 UI 问题以及由此导致的任何位置问题消失。

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

【讨论】:

    【解决方案3】:

    我认为不支持在推动控制器时动态隐藏和显示导航栏的行为。

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

    【讨论】:

    • 你能举个例子吗
    【解决方案4】:

    使用下面的行隐藏navigationBarin viewWillAppear: 方法 -

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

    【讨论】:

    • 我发现我在使用该方法时遇到了问题 - 如果我使用从左侧的交互式滑动将页面从第二个屏幕返回到第一个屏幕,但提前释放它(没有完成滑动) ,当我移动到第三个屏幕时,导航控制器会“卡住”显示第二个屏幕的标题和按钮栏。解决方案是使用 setNavigationBarHidden:animated:,就像这样:[self.navigationController setNavigationBarHidden:YES animated:YES]; 这解决了我的问题。
    【解决方案5】:

    尝试在B类

    viewWillDisAppear中设置navigationBarHidden:

    B级

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

    【讨论】:

    • 只需尝试在B类中设置上述代码,然后将navigationBar的A类中的其他设置删除为YES/NO
    • 我试过了,但是当我转到之前显示的 A 类导航栏时
    【解决方案6】:

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

    • Class AviewDidAppear:方法中隐藏Class AnavigationBar
    • window 设置为您想要显示的颜色。
    • 您可以将图像添加到window 背景,其中在图像顶部制作navigationBarClass BnavigationBar 相同,因此当原始navigationBar 将被隐藏时它会看到。

    【讨论】:

    • 我想当用户从 B 类到 A 类时,蓝色图像在几分之一秒内显示,那么如何解决这个问题?
    • 那个时候你想看什么颜色?
    • 我认为不能直接设置那几分之一秒会出现。
    • 请看上面的屏幕截图,蓝色显示在屏幕的右半部分。
    • @Mnu - 我看到了,我问你想要什么,我的意思是这里应该用什么颜色而不是蓝色?
    【解决方案7】:

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

    所以,推的时候:

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

    当弹出时:

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

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

    不幸的是,我发现UINavigationControllerDelegate 方法并没有太大帮助,willShowViewControllerdidShowViewController 在推送我的 B 类 视图或从另一个视图弹出时无法区分调用它已经推动了。

    我遵循 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:,但这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2021-07-21
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多