推/stream视图控制器与导航栏从视图控制器没有导航栏

我试图用一个隐藏的导航栏从视图控制器的可见导航栏推视图控制器。

我尝试了[[self navigationController] setNavigationBarHidden:YES animated:NO];各种组合[[self navigationController] setNavigationBarHidden:YES animated:NO]; 在viewWillAppear,viewDidAppear,viewWillDisappear …等等

 // First View Controller @implementation FirstViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:YES animated:NO]; NSLog(@"[%@ viewWillAppear]", self); } @end // Second View Controller @implementation SecondViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[self navigationController] setNavigationBarHidden:NO animated:NO]; NSLog(@"[%@ viewWillAppear]", self); } @end 

没有工作。 我也试过自定义代码来“animation”一个推动和stream行,这工作,但我失去了边缘滑动和查看平移。 在我深入挖掘之前,只要确保我没有重新发明轮子。

星巴克应用程序是我想模仿的东西。

应用程序的根视图控制器(黑暗的背景视图)是全屏幕,并注意它没有UINavigationBar。 但是当你点击其中一个button时,它会用一个UINavigationBar将一个视图控制器(浅色的背景视图)推送出去。 从那里,如果你点击“后退”箭头,它会查看控制器与导航栏popup。 互动式的stream行滑动手势也可以。

星巴克iOS应用程序

你可以不用自己拼凑一个解决scheme。 这是你做的:

你的根viewController:

 @implementation ViewController .... - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated]; } @end 

而推的viewController:

 @implementation SecondViewController - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated]; } @end 

这会做。 它也保持互动过渡的工作;)

然而,我发现这令人不安,苹果公司根本没有logging这种types的function。 – 你也可以用这些“调用点”隐藏和显示工具栏(在viewWillAppear里面:)

编辑

我只是意识到,这是你在你的问题中写的相同的代码。 请再次testing。 我100%确定这是有效的 – 我也在我的一个应用程序中使用了这个function。

还请注意,我的代码使用animated:animated而不是animated:NO 。 这可能是关键点:)

我只是设置了两个视图控制器来来回testing。

 @interface VC1 () @end @implementation VC1 - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = YES; } @end 

和第二个

 #import "ViewControllerTwo.h" @interface ViewControllerTwo () @end @implementation ViewControllerTwo - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBarHidden = NO; } @end 

VC1embedded到导航控制器(这是应用程序的根控制器)中,并带有一个导航到ViewControllerTwo的button。 我有一个推从VC1 – > ViewControllerTwo,这个方法工作。 当我点击button时,视图控制器在ViewControllerTwo上可见,当我按下时,导航条消失了。