2012-10-23 121 views
1

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

类A:B

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [email protected]"A"; 
    [self.navigationController setNavigationBarHidden:YES]; 
} 

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

类:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [email protected]"B"; 
    [self.navigationController setNavigationBarHidden:NO]; 
} 

-(void)Previousscreen 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

然后我运行应用程序,当我去到以前的班级像B到A在低于B级的时候蓝色展附上屏幕截图供您参考。如何解决这个问题?请帮我

由于提前

enter image description here

+0

[self.navigationController setNavigationBarHidden:NO];也可以在viewWillAppear中设置此行。 – 2012-10-23 10:12:20

+0

你想要显示哪种颜色? – TheTiger

回答

1

您需要使用此代码:

[navigationController setNavigationBarHidden: YES animated:YES]

- (空)viewWillAppear中:(BOOL)动画或以后在这两类视图生命周期。 [避免这样做 - (无效)viewDidLoad中]

这里的窍门是在使用setNavigationBarHidden:动画方法(代替简单setNavigationBarHidden的:方法)。这将确保您的用户界面问题消失,并确保由此导致的任何位置问题。

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

2

将其设置在B类

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

感谢您的回复 – SampathKumar

+0

欢迎,它为您工作。 – 2012-10-23 10:23:29

+0

我会检查它尽快更新。 – SampathKumar

0

尝试在B类的viewWillDisAppear

B类设置navigationBarHidden:

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

感谢您的回复。 – SampathKumar

+0

我试过这个,但同样的问题再次出现。 – SampathKumar

+0

试试在B班设置上面的代码,并删除navigationBar的A类中的其他设置,将其设置为YES/NO – AppleDelegate

0

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

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

+0

示例为这 – SampathKumar

+0

答案是如此简单我无法想象一个例子... – Sulthan

0

使用隐藏navigationBarviewWillAppear:方法 -

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

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

0

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

  • 隐藏Class AnavigationBarClass AviewDidAppear:方法。
  • 设置您想要显示的颜色window
  • 您可以添加一个图像到window背景,其中在图像的顶部作出navigationBar相同Class BnavigationBar所以当原始navigationBar将被隐藏它会看到。
+0

感谢您的回复 – SampathKumar

+0

我想当用户转到之前的B班到A,当时蓝色图片显示的是秒数的小数部分,那么如何解决这个问题呢? – SampathKumar

+0

你想在当时看到哪种颜色? – TheTiger

0

我最近已经解决了这个,我发现,这是需要调用setNavigationBarHidden:NOpushViewController: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 & didShowViewController推我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:称为继按下后退按钮,但这个工作对我来说。