1

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

提前致谢

在此处输入图像描述

4

7 回答 7

2

设置在 B 类

-(void)viewWillAppear:(BOOL)animated
{
 [self.navigationController setNavigationBarHidden:NO];
}
于 2012-10-23T10:13:24.867 回答
1

您需要使用以下代码:

[navigationController setNavigationBarHidden: YES animated:YES]

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

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

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

于 2014-03-26T09:49:40.180 回答
0

尝试设置B 类navigationBarHidden:inviewWillDisAppear

B 类

-(void)viewWillDisAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES];
}
于 2012-10-23T10:14:35.693 回答
0

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

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

于 2012-10-23T10:19:04.340 回答
0

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

-(void)viewWillAppear:(BOOL)animated
{
    self.navigationController.navigationBar.hidden=YES;
}
于 2012-10-23T10:24:35.043 回答
0

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

  • 隐藏Class AnavigationBarin方法Class AviewDidAppear:
  • 设置window你想要显示的颜色。
  • 您可以将图像添加到window背景中,其中图像顶部与'snavigationBar相同,因此当原始图像被隐藏时它会看到。Class BnavigationBarnavigationBar
于 2012-10-23T10:33:47.380 回答
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方法并没有太大帮助,并且在推送我的willShowViewControllerB视图或从它推送的另一个视图弹回该视图时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:按下后退按钮后有更简单的方法可以调用,但这对我有用。

于 2013-07-31T02:19:54.310 回答