1

我在导航vc中嵌入了一个root vc,我使用它设置了隐藏的导航栏
[self.navigationController setNavigationBarHidden:YES];
它工作正常,导航栏消失了。

并推送 2nd vc 使用
[self.navigationController pushViewController:controller animated:YES];
在 2nd vc 中设置导航栏显示。一切顺利。

所以当我点击导航栏上的“后退按钮”时,我发现导航栏消失的速度比视图快,尤其是设置视图的背景为黑色,我可以看到整个视图是黑色的,就像没有导航栏一样曾经。
我不想要这个,我只希望导航栏一直存在,直到 viewDidDisappear。

这是问题的图片

我使用[self.navigationController popViewControllerAnimated:YES];并且必须填写 Animated is YES 可以重现这种外观。

对于排序,

  1. 导航vc中的两个vc。
  2. 根vc的导航栏被隐藏,第二个VC从根vc推送。
  3. 第二个vc制作了导航栏显示。
  4. 用来[self.navigationController popViewControllerAnimated:YES]背。

代码位置在哪里:
ps:无论你如何设置导航栏的hidden-property,在ViewDidLoad或者ViewWillAppear或者ViewDidAppear或者其他地方,都是一样的外观。

在根 vc 的 viewDidLoad
[self.navigationController setNavigationBarHidden:YES];

和 root vc 的 didSelectRowAtIndexPath:
[self.navigationController setNavigationBarHidden:NO];

4

4 回答 4

2

哪里错了

  • RootView 和 SubView 在同一个 NavigationController 层次结构中。这意味着 navigationBar 既不属于 RootView 也不属于 SubView。
  • 在这种情况下,navigationBar 是全局且唯一的。您不能仅使用一个导航栏来处理两个视图的显示。

怎么解决

  • 在子视图中,我创建了一个新的导航栏来替换现有的导航栏,并将其添加到子视图的子视图中。它运作良好。
于 2014-01-10T09:34:42.717 回答
1

您只需要将setNavigationBarHidden:Yes2nd vc's的调用viewWillDisappear:移至 root vc's viewDidAppear:

我从视觉上知道这并不令人愉快。我只是给了你你所说的你想要的:“我只是希望导航栏一直存在,直到 viewDidDisappear。” 要获得良好的过渡,您需要使用自定义过渡。

于 2014-01-16T15:10:47.053 回答
0

Frome ViewDidLoad,移动 [self.navigationController setNavigationBarHidden:YES]; 在 ViewDidAppear 方法中。它会起作用的。

于 2014-01-09T09:48:55.333 回答
0

您应该移至[self.navigationController setNavigationBarHidden:NO];您的 subVCviewWillAppear:并移至[self.navigationController setNavigationBarHidden:YES];您的 RootViewviewWillAppear:

于 2014-01-10T02:30:23.300 回答