美文网首页
导航手势返回与边缘侧滑手势冲突问题

导航手势返回与边缘侧滑手势冲突问题

作者: 黑羽肃霜 | 来源:发表于2018-10-20 17:42 被阅读14次

    问题描述

    示意图.gif

    假设我们的 App 在首页带有侧边栏的抽屉滑动效果。那么这时会有一个问题:

    如果右侧的页面,是一个通过 UINavigationViewController,你的侧滑返回手势,和侧滑拉出抽屉的手势冲突了。你会发现,抽屉根本拉不出来

    解决思路

    手势冲突了,那么我希望什么呢?
    我希望在NavigationviewControllers 的栈顶控制器(就是一级页面),禁用 NavigationController的侧滑返回手势,而在二级会以上的页面才恢复。

    实质就是,需要写一个导航控制器的子类,在其中接管侧滑返回的代理控制侧滑手势的使能。

    代码

    class WithoudGestureRecognitionOnTopNavigationViewController: UINavigationController, UIGestureRecognizerDelegate, UINavigationControllerDelegate {
        override func viewDidLoad() {
            super.viewDidLoad()
            
            interactivePopGestureRecognizer?.delegate = self
            delegate = self
        }
        
        // MARK: UINavigationControllerDelegate
        // 导航的栈顶页面,增加手势禁用,防止拉开抽屉和侧滑返回的手势冲突
        func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
            // 只有一个根控制器的时候,禁用手势
            interactivePopGestureRecognizer?.isEnabled = viewControllers.count > 1 
        }
    }
    
    

    相关文章

      网友评论

          本文标题:导航手势返回与边缘侧滑手势冲突问题

          本文链接:https://www.haomeiwen.com/subject/xjpmzftx.html