我有一个滚动视图,并希望将多个网页视图动态地添加到它。 需要得到的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
}
这是一个非常好的问题,装修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
应该满足您的需求更好。