iOS 让WKWebView侧滑返回时html逐级返回

作者: 倒着游的鱼 | 来源:发表于2021-06-16 18:59 被阅读0次

    iOS项目中使用WKWebView来加载html页面时,如果html页面只有一级的话,那么侧滑返回没什么问题,但如果html是多级的话,那么侧滑返回时有时就会出现直接返回到上级控制器,而不是返回上一级html页面。这是因为html页面的侧滑返回和导航控制器的侧滑返回发生冲突了,系统无法识别到底是哪一种侧滑返回。

    WKWebView有一个canGoBack属性(A Boolean value indicating whether there is a back item in the back-forward list that can be navigated to.),该属性为true/YES时表示webview当前加载的html的页面级数 >= 2 ,为false/NO时,表示当前处于html的一级页面。

    那么,我们可以通过KVO来监听webview的canGoBack属性值变化来解决html页面的侧滑返回和导航控制器的侧滑返回冲突的问题:即当canGoBack属性值变为true/YES时,禁用导航控制器的侧滑返回手势;当canGoBack的属性值变为false/NO时,解禁导航控制器的侧滑返回手势。

    具体操作如下:

    Swift版:

    private let canGoBackKeyPath = "canGoBack"
    
    webView.addObserver(self, forKeyPath: canGoBackKeyPath, options: .new, context: nil)
    
    open override func observeValue(forKeyPath keyPath: String?,
                                        of object: Any?,
                                        change: [NSKeyValueChangeKey: Any]?,
                                        context: UnsafeMutableRawPointer?) {
            guard let theKeyPath = keyPath, object as? WKWebView == webView else {
                super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
                return
            }
            if theKeyPath == canGoBackKeyPath{
                if let newValue = change?[NSKeyValueChangeKey.newKey]{
                    let newV = newValue as! Bool
                    if newV == true{
                        self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false;
                    }else{
                        self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true;
                    }
                }
            }
        }
    
    
    deinit {
            webView.removeObserver(self, forKeyPath: canGoBackKeyPath, context: nil)
        }
    

    OC版:
    将以上Swift方法代码转换

    或使用以下方式达到想要效果

    pod 'TDWebViewSwipeBack'

    只需要一句代码

    [self addWkwebView:self.wkWebView swipeBackAble:YES];
    

    demo演示
    https://github.com/strivever/TDWebViewSwipeBack

    相关文章

      网友评论

        本文标题:iOS 让WKWebView侧滑返回时html逐级返回

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