使用Webview打开富文本并获取高度
在暂时富文本弹窗内容时,为了方便展示适配,一般都直接使用wkwebview进行展示 同时好需要加载好内容后获取内容获取到真实的高度,如果高度超过一定的阈值,就要WebView高度固定变成可滚动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class TestWebVC: UIViewController, WKNavigationDelegate {
var htmlWebViewHeight: CGFloat = 0
var webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(webView)
self.showText(content: "helloWorld")
}
// MARK: 加载文本
func showText(content: String) {
var html = """
<html lang="zh-cn">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=auto,initial-scale=1, maximum-scale=1, minimum-scale=1,user-scalable=no"/>
<style>
body {
font-size:100%;
margin:0;
padding-left:10;
padding-right:10;
}
</style>
</head>
<body>
#=#content#=#
</body>
</html>
"""
// 将内容放到body里
html = html.replacingOccurrences(of: "#=#content#=#", with: content)
webView.loadHTMLString(html, baseURL: nil)
}
// MARK: WKNavigationDelegate
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.body.scrollHeight") { result, error in
guard let height = result as? CGFloat else { return }
if self.htmlWebViewHeight == height {
// 如果相同就不处理,防止无效浪费
return
}
var showHeight: CGFloat = 0
var isShowScollIndicator = false
if height <= 50 {
// 真实高度小于最小高度,直接使用最小高度
showHeight = htmlWebViewMinHeight
} else if height <= 250 {
// 在最小最大之间,使用真实高度
showHeight = height
} else {
// 超过了最大高度,使用最大高度,展示滚动条
showHeight = 250
isShowScollIndicator = true
}
// 计算出来的高度大于固定高度
webView.scrollView.showsVerticalScrollIndicator = isShowScollIndicator
webView.scrollView.isScrollEnabled = isShowScollIndicator
// 更新WebView的高度
webView.snp.updateConstraints { make in
make.height.equalTo(showHeight)
}
}
}
}
This post is licensed under CC BY 4.0 by the author.