显示包含中型应用等评论的文章

时间:2017-07-12 02:19:45

标签: ios uitableview webkit

在我的 iOS 应用程序中,我希望显示动态尺寸文章,然后显示在应用中执行的评论。本文可以按随机顺序显示视频和文本。我正在尝试使用 UITableView 来完成此任务。在我的自定义表格视图单元格中,有 WKWebView ,我在其中显示网页内容。我正在使用其属性

检查 WKWebView 的内容大小
webView.scrollView.contentSize.height

它会在某些URL的委托中返回高度,但有时会返回内容高度为0.有时它只加载半页。 所以我对这个任务有一些疑问:

1)为此目的,使用 UITableView 的最佳方法是什么?如果它不好那么应该选择什么。

2)我正在使用 WebKit 来显示网页内容。当我在视图控制器中显示数据时,它工作正常,但当它在 UITableViewCell 内时,它的行为是不同的。在UITableViewCell内部,加载页面需要一段时间,它不会加载整页,有时它根本不加载页面。那么建议在UITableViewCell中使用WebKit吗?如果这是好的方法,那我怎么能摆脱这些问题

1 个答案:

答案 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获取内容高度