0

假设我们有三个屏幕像这样互相推送 A-> B-> C 屏幕A原本是在tabBar中。 导航栏应该被隐藏在屏幕C和可见的所有rest.To的做到这一点我做了以下在viewWillAppear中使用setNavigationBarHidden不起作用

-(void) viewWillAppear:(BOOL)animated{ 

    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden: YES animated:NO]; 
} 

的viewWillAppear中被调用在所有的情况下,但隐藏或显示的导航栏不一定在UI上得到反映。 例如,如果使用后退按钮,则导航栏会同时出现在A & B中,但是如果点击tabBarButton,导致应用程序即使从屏幕C直接跳转到屏幕A,屏幕A也会缺少导航栏。 我检查了self.navigatioController,它已经初始化并且有一个值。

我也试着在viewDidAppear中设置NavigationBarHidden属性,但没有运气。

在这个问题上的任何帮助?什么可能导致这样一个奇怪的场景?

编辑︰答案 我发现了这个问题。 屏幕C是很多容器的复杂屏幕。在其中一个容器中,我改变了navigationBar状态,并影响了应用程序中的所有其他内容,并导致了奇怪的行为,并使我无法自己控制状态。 对不起。

+0

你试过把它隐藏在vc B的'viewDidDissapear'上吗? – Tj3n

+0

是的,我做了,但也没有工作也# –

+0

'[self.navigationController setNavigationBarHidden:YES];'工作正常,当我只是把它放在'viewDidLoad',你可能想再次检查,如果你取消隐藏它的某个地方代码 – Tj3n

回答

0

在这两种的viewController A和的viewController B,使用此:

-(void) viewWillAppear:(BOOL)animated{ 

    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden: NO animated:NO]; 
} 

在的viewController C,使用此(如在问题中提到):

-(void) viewWillAppear:(BOOL)animated{ 

    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden: YES animated:NO]; 
} 
+0

这正是我在做什么,但由于某种原因,它不工作。 它之前工作,但突然停止。 –

+0

我会检查并回复给你.. – KSR

+0

你可以发表你的viewControllers的截图吗? – KSR

-1

尝试以下方法: -

[self.navigationController setNavigationBarHidden: YES animated:YES]; 

代替: -

[self.navigationController setNavigationBarHidden: YES animated:NO]; 
0

我发现了这个问题。屏幕C是一个很多容器的复杂屏幕。 在其中一个容器中,我改变了navigationBar状态,并且影响了应用程序中的所有其他内容,并导致了怪异的beahviour。

+0

Ok ..你的问题解决了.. – KSR

+0

在我的示例中,我的答案工作正常.. – KSR