隐藏导航栏时如何启用滑动手势?

Posted

技术标签:

【中文标题】隐藏导航栏时如何启用滑动手势?【英文标题】:How to enable swipe gesture when navigation bar is hidden? 【发布时间】:2018-02-23 18:48:44 【问题描述】:

我已经尝试解决这个问题很长一段时间了,但无法弄清楚。我有当前的设置:

在每个视图控制器中,我像这样隐藏导航栏:

        self.navigationController?.setNavigationBarHidden(true, animated: true)

问题是我松开了隐藏导航栏的视图控制器上的滑动手势。我需要启用动画并且不能使用:

    self.navigationController?.navigationBar.isHidden = true
    self.navigationController?.isNavigationBarHidden = true 

任何帮助都会很棒,因为我相信很多人都遇到过这个问题。谢谢!

【问题讨论】:

使用此代码self.navigationController?.interactivePopGestureRecognizer?.delegate = self 我尝试使用它,但是当我使用应用程序切换屏幕时,它停止工作。该应用程序似乎冻结了,但实际上 VC 上的一个存在但不在屏幕上。然后我就可以把它滑下来了。好奇怪 【参考方案1】:

答案是:只需将 NavigationController 子类化并执行以下操作。

  import UIKit

class YourUINavigationController: UINavigationController 
        override func viewDidLoad() 
            super.viewDidLoad()
            interactivePopGestureRecognizer?.delegate = self
        
    

    extension YourUINavigationController: UIGestureRecognizerDelegate 
        func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool 
            return viewControllers.count > 1
        
    

【讨论】:

我认为您输入了错误的扩展名。 YourUINavigationController 而不是 VaultUINavigationController @MostfaEssam 这是正确的,我现在刚刚编辑它。【参考方案2】:

您可以通过执行以下操作来处理滑动手势,这将帮助您避免冻结应用程序。

- (void)navigationController:(UINavigationController *)navigationController
       didShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animate

    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
    
        if (self.navigationController.viewControllers.count > 1)
        
            self.navigationController.interactivePopGestureRecognizer.enabled = YES;
        
        else
        
            self.navigationController.interactivePopGestureRecognizer.enabled = NO;
        
    

【讨论】:

以上是关于隐藏导航栏时如何启用滑动手势?的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 中隐藏导航栏时不向后滑动

隐藏状态栏时,我的导航栏在 iOS7 中向上移动

iOS 7隐藏导航栏时如何更改状态栏的颜色?

在iOS 7中隐藏导航栏时,如何更改状态栏的颜色?

搜索显示控制器如何隐藏导航栏?

如何在按下导航栏时快速隐藏键盘