将带有可见导航栏的视图控制器弹出到带有隐藏导航栏的视图控制器时,带有 interactivePopGestureRecognizer 的黑色区域

Posted

技术标签:

【中文标题】将带有可见导航栏的视图控制器弹出到带有隐藏导航栏的视图控制器时,带有 interactivePopGestureRecognizer 的黑色区域【英文标题】:Black area with interactivePopGestureRecognizer when popping a view controller with visible nav bar to a one with hidden nav bar 【发布时间】:2014-03-16 20:00:17 【问题描述】:

我有这个 ViewController #1,它是导航控制器的根视图控制器,并且有

self.navigationController.navigationBarHidden = YES;

ViewController #1 告诉它的导航控制器推送 ViewController #2,它有

self.navigationController.navigationBarHidden = NO;

当我想通过从屏幕左侧滑动从 ViewController #2 返回到 ViewController #1 时,我看到我的视图是我在此处附加的屏幕截图。这是在我将手指向右移动时捕捉到的,因此当我不断向右滑动时,右上角的黑色区域越来越小,直到 ViewController #1 覆盖所有屏幕区域。

我猜这是由两个视图控制器之间的隐藏/可见导航栏差异引起的。

我想知道是否有可能摆脱这个黑色区域。

【问题讨论】:

【参考方案1】:

正如HoanNguyen 所讨论的那样,我已经将代码隐藏/显示在 viewWillAppear/Disappear 上的导航栏,但最后我发现诀窍是设置动画值。很奇怪,但这解决了我的问题,黑色区域现在消失了:

- (void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:self.shouldHideNavBar animated:animated];


- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:!self.shouldHideNavBar animated:animated];

【讨论】:

【参考方案2】:

您应该将代码集隐藏/显示导航放在 viewWillAppear 或 viewDidAppear 中。

【讨论】:

嗯...我已经创建了一个测试项目,它运行良好。所以我认为你的代码在某个地方影响了这个视图。 嘿 Hoan,请在下面查看我的答案。我终于弄明白了!感谢您的回答!

以上是关于将带有可见导航栏的视图控制器弹出到带有隐藏导航栏的视图控制器时,带有 interactivePopGestureRecognizer 的黑色区域的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11:带有不透明导航栏的导航控制器内带有滚动视图的弹出视图控制器在转换期间导致奇怪的内容动画

带有透明导航栏的可见按钮

滚动上带有隐藏导航栏的页面菜单

标签栏第二次点击弹出到导航控制器 - 如何停止它

带有半透明导航栏的滚动条

带有导航栏的滚动视图控制器