我在导航vc中嵌入了一个根vc,我使用[self.navigationController setNavigationBarHidden:YES];
设置了隐藏的导航栏。它工作正常,导航栏消失了。
并按下第二个vc使用[self.navigationController pushViewController:controller animated:YES];
在第二个vc中设置导航栏显示。一切顺利。
所以当我点击导航栏上的"后退按钮"时,我发现导航栏消失的速度比视图快,尤其是将视图的背景设置为黑色,我可以看到整个视图都是黑色的,就像从来没有任何导航栏一样
我不想要这个,我只希望导航栏一直显示到视图DidDisappear
这是问题的图片
我使用[self.navigationController popViewControllerAnimated:YES];
,必须填充动画是YES才能再现这种外观。
对于排序,
- 导航vc中的两个vc
- 根vc的导航栏被隐藏,第二个vc从根vc推送
- 第二个vc显示了导航栏
- 使用
[self.navigationController popViewControllerAnimated:YES]
后退
代码位置在哪里:
ps:无论您如何设置导航栏的隐藏属性,在ViewDidLoad、ViewWillAppear、ViewDidPear或其他位置,它们都是相同的外观。
在根vc的视图中DidLoad[self.navigationController setNavigationBarHidden:YES];
根vc的didSelectRowAtIndexPath:[self.navigationController setNavigationBarHidden:NO];
哪里错了
- RootView和SubView位于同一NavigationController层次结构中。这意味着导航栏既不属于根视图,也不属于子视图
- 导航栏是全球性的,在这种情况下是独一无二的。仅使用一个导航栏无法处理两个视图的显示
如何解决
- 在子视图中,我制作了一个新的导航栏来替换现有的导航栏,并将其添加到子视图的子视图中。它运行良好
您只需要将setNavigationBarHidden:Yes
的调用从2nd vc的viewWillDisappear:
移动到root vc的viewDidAppear:
。
我从视觉上知道这并不愉快。我只是给了你你说你想要的:"我只是希望导航栏一直显示到视图DidDisappear。"要想获得一个好的过渡,你需要使用自定义过渡。
从ViewDidLoad,移动[self.navigationController setNavigationBarHidden:YES];在ViewDidPear方法中。它会起作用的。
您应该将[self.navigationController setNavigationBarHidden:NO];
移动到子VC的viewWillAppear:
,并将[self.navigationController setNavigationBarHidden:YES];
移动到RootView的viewWillAppear: