我的观点
在代码的开头,我使用了一点检查以查看用户之前是否看过了介绍视图,如果没有,我使用以下代码从ViewController
到IntroViewController
:< / 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];
我觉得我错过了一些小事,我只是无法找到它。谁能请我提供一些建议?
答案 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