WKWebView高度精准自适应

原理:利用WKWebView 有提前注入一段js方法,在页面加载完成后调用此方法并获取返回值的能力。

前提:需要在html的body的最后加一个空标签,id为myid。

1.注入js代码(包含一个refreshView方法)

let js = "function refreshView () {" +
        "var imgstyle=document.getElementsByTagName('img');" +
        "for(var i=0;i

2.拼接html并加载

let header = ""
let div = "
" let html = "" + header + "" + body + div + "" self.wkWebView.loadHTMLString(html, baseURL: nil)

3.在加载完成后调用refreshView方法

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript("refreshView()") {[weak self] (obj, error) in
//            DLog(items: "-------obj = \(String(describing:obj)),error = \(String(describing: error))")
            if let hasSelf = self {
                hasSelf.evaluateJavaScript(obj: obj, error: error)
            }
        }
    }
    
    func evaluateJavaScript(obj:Any?, error:Error?) {
        if let height = obj as? CGFloat {
//            DLog(items: "height----\(height)")
            if height != self.height {
                self.frame = CGRect(x: 0, y: 0, width: k_screen_width, height: height)
                self.wkWebView.frame = self.bounds
                if let block = self.refresh {
                    block()
                }
            }
        }
    }
WKWebView高度精准自适应_第1张图片
头部.png
WKWebView高度精准自适应_第2张图片
中部.png
WKWebView高度精准自适应_第3张图片
底部.png

你可能感兴趣的:(WKWebView高度精准自适应)