PresentViewController隐藏UINavigationBar

时间:2014-01-08 22:17:51

标签: ios objective-c uinavigationcontroller uinavigationbar uitoolbar

我的观点

  • ViewController:主视图,UINavigationController
  • IntroViewController:介绍视图, UINavigationController

在代码的开头,我使用了一点检查以查看用户之前是否看过了介绍视图,如果没有,我使用以下代码从ViewControllerIntroViewController:< / p>

IntroViewController *introViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"IntroViewController"];
            [self presentViewController:introViewController animated:NO completion:nil];

一切顺利,介绍发挥得很好,然后在使用以下代码返回ViewController时,UINavigationBar和UIToolbar消失了,但视图的内容仍然可见:

ViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
            [self presentViewController:homeViewController animated:NO completion:nil];

我觉得我错过了一些小事,我只是无法找到它。谁能请我提供一些建议?

3 个答案:

答案 0 :(得分:0)

这是因为您将视图控制器呈现为“它是”。 我打赌你没有UINavigationController控制故事板中的HomeViewController,对吗? 当然,IntroViewController中确实有UINavigationController(或UINavigationController为“受控”),对吗?

解决方案是添加将管理HomeViewController的UINavigationController。在这种情况下,一切都会好起来的。

但请不要忘记,从那一刻起,您的应用中将会有UINavigationController的两个不同实例。

当呈现控制器时,其视图添加视图层次结构,而不是导航堆栈。

来自-[UIViewController presentViewController:animated:completion:]文档:

  

此方法将presentViewController属性设置为指定的视图控制器,调整视图控制器的视图大小,然后将视图添加到视图层次结构

供参考,请阅读this

答案 1 :(得分:0)

如果要返回显示给您的控制器,则不会显示该控制器的另一个实例,这就是您正在执行的操作。你解雇自己,

[self dismissViewControllerAnimated:YES completion:nil];

答案 2 :(得分:0)

presentviewcontroller方法替换整个视图,所以如果你有任何导航栏或工具栏......它将不会显示。

如果你想回到普遍的观点..你应该使用

[self dismissViewControllerAnimated:YES completion:nil];

如果出于任何原因......您需要创建该视图的新实例..您应该创建一个新的导航控制器,将目标视图控制器设置为rootviewcontroller ...并显示navigationcontroller。这将使navigationBar再次出现。

GL HF