Swift WKWebView自适应高度实现
Swift 写 UITableViewCell 加载 WebView 时的自适应高度,确实挺让人头大的。Web 内容高度变来变去,cell 要跟着调,不好就会卡顿或者内容被截断。我之前也踩过不少坑,后来摸索出一套比较顺的做法——用WKWebView
配合Auto Layout
,再利用evaluateJavaScript
拿到真实的内容高度,实时更新 cell 的高度。
核心思路蛮简单:cell 里放一个WKWebView
,加载完成后拿document.body.scrollHeight
,触发tableView.beginUpdates()
刷新布局。这一套下来,内容能完整展示,滑动也流畅。
你要注意的是:cell 重用的时候记得清理,否则 WebView 会乱套。可以在prepareForReuse()
里取消加载、清空内容什么的。最好是封装一个WebCell
类,把加载逻辑和高度计算放一起,外面用起来也方便。
如果你之前在搞UITableViewAutomaticDimension
、estimatedRowHeight
这些自适应属性,这个技巧能无缝配合,用起来挺舒服。
哦对了,下面这段代码建议直接抄,用在WKWebView
的加载完成回调里:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.body.scrollHeight") { (height, error) in
if let height = height as? CGFloat {
self.updateCellHeight(height)
}
}
}
整体效果还不错,适合加载富文本、文章详情页那种内容长度不固定的场景。如果你正好遇到类似需求,可以试试这个思路。
430.25KB
文件大小:
评论区