在我的 iOS 应用程序中,我希望显示动态尺寸文章,然后显示在中应用中执行的评论。本文可以按随机顺序显示视频和文本。我正在尝试使用 UITableView 来完成此任务。在我的自定义表格视图单元格中,有 WKWebView ,我在其中显示网页内容。我正在使用其属性
检查 WKWebView 的内容大小webView.scrollView.contentSize.height
它会在某些URL的委托中返回高度,但有时会返回内容高度为0.有时它只加载半页。 所以我对这个任务有一些疑问:
1)为此目的,使用 UITableView 的最佳方法是什么?如果它不好那么应该选择什么。
2)我正在使用 WebKit 来显示网页内容。当我在视图控制器中显示数据时,它工作正常,但当它在 UITableViewCell 内时,它的行为是不同的。在UITableViewCell内部,加载页面需要一段时间,它不会加载整页,有时它根本不加载页面。那么建议在UITableViewCell中使用WebKit吗?如果这是好的方法,那我怎么能摆脱这些问题
答案 0 :(得分:0)
extension ContentViewController: WKUIDelegate, WKNavigationDelegate {
//webview content cell
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
// print("didCommitNavigation");
// if webView.isLoading == true {
// self.contentSize = 300
// return
// }
let javascriptString = "" +
"var body = document.body;" +
"var html = document.documentElement;" +
"Math.max(" +
" body.scrollHeight," +
" body.offsetHeight," +
" html.clientHeight," +
" html.offsetHeight" +
");"
webView.evaluateJavaScript(javascriptString) { (result, error) in
if error == nil {
// print(result as! CGFloat)
guard result is CGFloat else {
return
}
self.contentSize = result as! CGFloat
if self.contentSize < 300 {
self.contentSize = 300
}
DispatchQueue.main.async(execute: {
self.tableView?.beginUpdates()
self.tableView?.endUpdates()
})
}
}
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let javascriptString = "" +
"var body = document.body;" +
"var html = document.documentElement;" +
"Math.max(" +
" body.scrollHeight," +
" body.offsetHeight," +
" html.clientHeight," +
" html.offsetHeight" +
");"
webView.evaluateJavaScript(javascriptString) { (result, error) in
if error == nil {
// print(result as! CGFloat)
// UIApplication.shared.isNetworkActivityIndicatorVisible = false
let finishContentSize = result as! CGFloat
if self.contentSize == finishContentSize {
return
}
// self.tableView.height
DispatchQueue.main.async(execute: {
self.contentSize = finishContentSize
self.tableView?.beginUpdates()
self.tableView?.endUpdates()
})
}
}
}
}
您可以使用javascript获取内容高度