UIWebView的高度计算在迅速(uiwebview height calculation in

2019-09-29 22:16发布

我有一个滚动视图,并希望将多个网页视图动态地添加到它。 需要得到的WebView的高度。 我已经使用下面的代码。 但它简化版,工作always.some次展示错高度。 FUNC webViewDidFinishLoad(aWebView:UIWebView的){

    let screenSize      = UIScreen.mainScreen().bounds
    let screenWidth     = screenSize.width
    var frame           = aWebView.frame
    frame.size.height   = 1
    frame.size.width    = screenSize.width
    aWebView.frame      = frame
    let fittingSize     = aWebView.sizeThatFits(CGSizeZero)
    frame.size          = fittingSize
    aWebView.frame      = frame

}

Answer 1:

这是一个非常好的问题,装修Web视图其内容有有趣的应用,如显示使用适合其内容的Web视图中的地图上的信息窗口。

下面是使用的溶液WKWebView通过创建一个1 * 1像素大小的网络视图,加载其内容,以及查询web视图相应地更新web视图帧大小之前找到它的内容大小开始。 稍微哈克但似乎是唯一的出路。

import WebKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
        view.addSubview(webView)
        webView.navigationDelegate = self
        let htmlFile = Bundle.main.path(forResource: "index", ofType: "html")
        let html = try! String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
        webView.loadHTMLString(html, baseURL: nil)
    }
}

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        var frame = webView.frame
        webView.evaluateJavaScript("document.documentElement.offsetWidth", completionHandler: { ret, _ in
            guard let width = ret as? CGFloat else { return }
            print("setting width: ", width)
            frame.size.width = width
            webView.frame = frame

            webView.evaluateJavaScript("document.documentElement.offsetHeight", completionHandler: { ret, _ in
                guard let height = ret as? CGFloat else { return }
                print("setting height: ", height)
                frame.size.height = height
                webView.frame = frame
            })
        })
    }
}

我的样本HTML文件( index.html ):

<html>
    <head>
        <meta name="viewport" content="width=150, initial-scale=1.0">
    <style>
        html, body { margin: 0; padding: 0 };

    </style>
    </head>
    <body>
        <div style="height:280px;width:150px;background-color:cyan;"></div>
    </body>
</html>

注意:您应该尝试使用WKWebView代替的UIWebView如果可能的话。 一个UIWebView解决方案是可能的,但我不认为这是值得的时间和精力,当WKWebView应该满足您的需求更好。



文章来源: uiwebview height calculation in swift