使用popToRootViewControllerAnimated:YES时,导航栏比视图消失得更快

时间:2014-01-09 08:56:11

标签: ios navigationbar popviewcontrolleranimated

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

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

所以当我点击导航栏上的“后退按钮”时,我发现导航栏消失的速度比视图快,特别是将视图的背景设置为黑色,我可以看到 整个视图都是黑色的,就像没有任何导航栏一样 我不希望这样,我只希望导航栏始终显示,直到viewDidDis出现。

Here is a picture of the problem

我使用[self.navigationController popViewControllerAnimated:YES];并且必须填写Animated is YES才能重现此外观。

对于排序,

  1. 导航vc中的两个vc。
  2. Root vc的导航栏被隐藏,第二个VC从根vc推出。
  3. 第二个vc使导航栏显示。
  4. 使用[self.navigationController popViewControllerAnimated:YES]返回。
  5. 代码位置在哪里:
    ps:无论你如何设置导航栏的hidden-property,在ViewDidLoad或ViewWillAppear或ViewDidAppear或其他地方,它们都是相同的外观。

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

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

4 个答案:

答案 0 :(得分:2)

哪里错了

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

如何解决

  • 在SubView中,我创建了一个新的navigationBar来替换现有的导航栏,并将其添加到SubView的子视图中。效果很好。

答案 1 :(得分:1)

您只需将setNavigationBarHidden:Yes的来电从第二个vc的viewWillDisappear:转移到root vc的viewDidAppear:

我在视觉上知道这不愉快。我刚刚给了你所说的你想要的东西:“我只希望导航栏一直存在,直到viewDidDis出现。”要获得良好的转换,您需要使用自定义转换。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您应该将[self.navigationController setNavigationBarHidden:NO];移至子vC viewWillAppear:并将[self.navigationController setNavigationBarHidden:YES];移至RootView的viewWillAppear: