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

Posted st646889325

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 让WKWebView侧滑返回时html逐级返回相关的知识,希望对你有一定的参考价值。

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逐级返回的主要内容,如果未能解决你的问题,请参考以下文章

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

Android模仿iOS实现侧滑返回(类似微信)

IOS侧滑返回和滑动视图的之间的冲突

iOS 让 WKWebView 支持 NSURLProtocol

iOS侧滑返回到隐藏导航栏的VC,导航栏会闪现一次

iOS开发:UINavigationController自定义返回按钮,系统导航支持侧滑返回