在弹出控制器时隐藏 iOS 7 中的导航栏

Posted

技术标签:

【中文标题】在弹出控制器时隐藏 iOS 7 中的导航栏【英文标题】:Hiding UINavigationBar in iOS7 while poping a Controller 【发布时间】:2014-03-05 09:37:06 【问题描述】:

所以我有两个 UIViewControllers - VC1 的属性为 self.navigationController.navigationBarHidden = YES; 和 VC2 的相同属性设置为 NO

我在 VC2 中做了以下操作:

    - (void)viewWillAppear:(BOOL)animated
        // Showing navigation bar for VC2
        self.navigationController.navigationBarHidden = NO;
    

    - (void)viewWillDisappear:(BOOL)animated
         // Hiding navigation bar for VC1
        self.navigationController.navigationBarHidden = YES;
    

它完美地隐藏了 VC1 的 NavigationBar。但是,当我使用所谓的interactivePopGestureRecognizer(即用手指向右滑动UIViewController 以弹出它)时,navigationBar 立即隐藏,甚至 95% 的视图都可见:

将代码放到viewDidDisappear 也无济于事,因为NavBar 会留在视图中(可能是因为它从未被调用过)。这不是我需要的:

在这种情况下,最好的解决方法是什么?我们如何让navBar 留在在 VC2 上,而它正在向右滑出并且出现在 VC1 上?

【问题讨论】:

试试 viewdiddisappear @KumarKl 查看我在帖子上的编辑,已经这样做了,但无济于事。 如果你能把它的图片或截图,那就太好了。 检查是否有回调方法在完成滑动后被调用,如 didFinishSliding:。如果是这样,请在该方法中添加导航栏隐藏/显示逻辑 @Ab'initio 这正是我要找的,但我还没有找到。 【参考方案1】:

事实证明答案非常简单,尽管它在任何地方都没有记录(或者至少我还没有找到它)。

应该使用[[self navigationController] setNavigationBarHidden:NO animated:YES] 而不是self.navigationController.navigationBarHidden = NO - 这与ios7interactivePopGestureRecognizer 完美配合,这是新animatedTransitions API 的一部分。希望这对将来的人有所帮助。

【讨论】:

【参考方案2】:

删除VC2中的self.navigationController.navigationBarHidden = YES;- (void)viewWillDisappear:(BOOL)animated

放在VC1- (void)viewDidAppear:(BOOL)animated

我觉得应该可以满足你的要求

谢谢,

萨提亚

【讨论】:

也没有帮助。令人惊讶的是,目前还没有好的解决方案。

以上是关于在弹出控制器时隐藏 iOS 7 中的导航栏的主要内容,如果未能解决你的问题,请参考以下文章

导航栏隐藏在 iPhone sdk 的弹出视图控制器上

防止 UISearchController 在 IOS8 中隐藏视图导航栏

在弹出窗口的标签栏中取消导航控制器中的 UITableView 搜索后,UINavigationBar 无响应

如何在 iOS 13 上最初隐藏导航控制器中的搜索栏?

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

在 iOS 11 上,导航项中的搜索栏在导航弹出时折叠并卡在状态栏下