显示带有评论的文章,例如 Medium 应用程序
Posted
技术标签:
【中文标题】显示带有评论的文章,例如 Medium 应用程序【英文标题】:Displaying article with comments like Medium app 【发布时间】:2017-07-12 02:19:45 【问题描述】:在我的 iOS 应用程序中,我想显示动态大小的文章,然后是在 Medium 应用程序中执行的 cmets。这篇文章可以有随机顺序的视频和文本。我正在尝试使用 UITableView 来完成这项任务。在我的自定义表格视图单元格中,有 WKWebView,我在其中显示 Web 内容。我正在使用 WKWebView 的属性检查内容大小
webView.scrollView.contentSize.height
它返回一些 URL 的代理高度,但有时它返回内容高度 0。有时它只加载半页。 所以我对这个任务有一些疑问:
1) 为此目的使用 UITableView 是最好的方法吗?如果它不好,那么应该有什么替代方案。
2) 我正在使用 WebKit 来显示网页内容。当我在视图控制器中显示数据时它工作正常,但是当它在 UITableViewCell 中时它的行为是不同的。在 UITableViewCell 内部,加载页面需要一段时间,它不会加载整个页面,有时它根本不加载页面。那么是否推荐在 UITableViewCell 中使用 WebKit 呢?如果这是好方法,那么我该如何摆脱这些问题
【问题讨论】:
【参考方案1】: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 获取内容高度
【讨论】:
以上是关于显示带有评论的文章,例如 Medium 应用程序的主要内容,如果未能解决你的问题,请参考以下文章