4

因此,在我推动一个新的viewController到一个视图的堆栈上,我将navigationBar设置为隐藏我注意到,它在下一个屏幕被推动之前消失,并且滑动动画发生(因为我需要在顶部的UIToolbar)。查看大小设置导航栏隐藏与推/流行

所以问题1:有没有办法推动一个新的视图控制器,并将导航栏设置为隐藏,并且在屏幕上显示新的视图控制器之前不会获取隐藏动画。它看起来很有趣,导航栏隐藏然后推动新的视图控制器。

一旦新的视图控制器存在时,当我弹出它关闭,我设置导航栏后面

[self.navigationController.navigationBar setHidden:NO]; 

但是,当它被弹出时,导航栏不回任何更多。是否因为此导航栏是针对当前的navigationController而不是在弹出窗口后显示的新导航栏? (问题#2)

问题3:实现它没有显示我的导航栏,在被弹出之后提出的的viewController,在viewDidAppear,我加

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.navigationController.navigationBar setHidden:NO]; 
} 

足见其的导航栏,但视图大小不正确,因为它好像是一旦导航栏被隐藏,视图的其余部分占据了空白区域,然后navigationBar位于内容之上。我能做些什么吗?或者,我是否用push和pop不正确地处理它?(问题#3)。

谢谢!

回答

0

有趣的问题。您可以尝试更改viewWillAppearviewWillDisappear中的hidden属性,但似乎可能无法提供期望的结果。

您可以以模态方式呈现视图控制器,而不是让导航栏消失吗?如果它是堆栈中的最后一个视图控制器,那将是可能的。用户看到视图控制器以不同方式呈现也可能更有意义。这可能向用户指示从该视图控制器离开的导航不再使用后退按钮完成。这可能比导航栏消失更合理。

如果你仍然希望视图控制器从右侧滑入,我认为它不能用模态视图控制器来完成。但是,您可以通过为填满屏幕的视图设置动画效果。 (您只需添加一个视图,其中origin.x等于屏幕宽度,然后在动画中将origin.x更改为0.0,如果需要更多细节,请告知我。)

但是,我会推荐以不同于导航控制器显示视图的方式呈现视图控制器。因为从本质上讲,您不再让用户离开此视图,因为他/她通常会从导航控制器中导航。 (所以,我对问题#3的回答是'是')。

1

我遇到了同样的问题(只是相反:我从一个隐藏的NavigationBar开始,并将视图推到了我想要的NavigationBar可见),并且实际上有一个非常简单的修复。

只需更换您的来电:

[self.navigationController.navigationBar setHidden:NO]; 

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

在我的代码,我调用每个相应的视图控制器的- (void)viewWillAppear:(BOOL)animated方法这些语句。

我刚刚按照您使用的顺序(可见,然后隐藏)尝试了这个解决方案,并且它看起来也工作得很好。