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

关于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。

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

记录一下:按照上面配置部分页面的侧滑有可能失效的问题。解决方案
把代码: navigationController?.interactivePopGestureRecognizer?.delegate = self
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
从viewdidload 改成 viewdidappear

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

这样配置 侧滑就正常了

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值