关于iOSAPP的侧滑功能我有话说

发布时间:2023年12月20日

关于iOSAPP的侧滑功能我有话说

什么是iOS的侧滑,就是iOS系统自带一个右滑返回
它的优点是效果好比较丝滑,不好的点就是关于使用的说明网络上很多文章都没有说清楚,今天就来聊聊这个功能

iOS的侧滑怎么启用呢?

为了作用到你后面每一个创建viewcontroller,所以需要把代码配置到你的BaseViewController
上代码:

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.interactivePopGestureRecognizer?.delegate = self
        navigationController?.interactivePopGestureRecognizer?.isEnabled = true

    }

extension BaseViewController: UIGestureRecognizerDelegate {
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        let count = self.navigationController?.children.count ?? 0
        if (gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer) {
            //屏蔽调用rootViewController的滑动返回手势,避免右滑返回手势引起死机问题
            if count == 0 {
                return false;
            }
        }
        //这里就是非右滑手势调用的方法啦,统一允许激活
        return true;
    }
    /// 是否允许多个手势同时触发,这个没有需要可以不加
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

配置了上面的代码块,那么在你的APP启用系统自带的侧滑就完毕了。下面是关于我使用过程中发现坑点说明

关于部分页面来回切换后,侧滑失效的坑

由于笔者最近项目上一个封装的一个webViewController,它继承自BaseViewController,在该Controller上挂载了一个wkwebview。它在被推出后部分机型的侧滑失效。如果你也面临这个情况可以尝试一下我的解决方案
在viewdidload或者viewwillAppear上执行下面代码,选择一个就可以:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.interactivePopGestureRecognizer?.delegate = self
        navigationController?.interactivePopGestureRecognizer?.isEnabled = true
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        navigationController?.interactivePopGestureRecognizer?.delegate = nil
        navigationController?.interactivePopGestureRecognizer?.isEnabled = false
    }
    override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
    
    override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

通过重新设置navigationController的interactivePopGestureRecognizer是否启用和代理,强制其使用当前controller的配置。在viewWillDisAppear关闭是防止webViewController被推到栈顶不显示的bug。

好了到这里今天的分享就结束了,如果这个解决方案帮助不到你,也可以私信或者评论留言,如果我看到就会马上回复你。

文章来源:https://blog.csdn.net/lingjunjie/article/details/135110271
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。