Uitableviewcell中WKWebview的内容在动态调整大小时正在消失

时间:2017-12-01 09:25:35

标签: html ios swift uitableview wkwebview

我正在加载我的UITableViewCell,如以下代码所示:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = super.tableView(tableView, cellForRowAt: indexPath);
    if (indexPath.row == 2) {
        Utilities.LogDebug(message: "Load html content");

        if (webViewHeight == 0.0) {
            let webConfiguration = WKWebViewConfiguration();
            infoWebView = WKWebView(frame: .zero, configuration: webConfiguration);
            infoWebView.navigationDelegate = self;
            infoWebView.translatesAutoresizingMaskIntoConstraints = false

            cell.contentView.addSubview(infoWebView);

            let height = NSLayoutConstraint(item: infoWebView, attribute: .height, relatedBy: .equal, toItem: cell.contentView, attribute: .height, multiplier: 1, constant: 0)
            let width = NSLayoutConstraint(item: infoWebView, attribute: .width, relatedBy: .equal, toItem: cell.contentView, attribute: .width, multiplier: 1, constant: 0)
            let leftConstraint = NSLayoutConstraint(item: infoWebView, attribute: .leftMargin, relatedBy: .equal, toItem: cell.contentView, attribute: .leftMargin, multiplier: 1, constant: 0)
            let rightConstraint = NSLayoutConstraint(item: infoWebView, attribute: .rightMargin, relatedBy: .equal, toItem: cell.contentView, attribute: .rightMargin, multiplier: 1, constant: 0)
            let bottomContraint = NSLayoutConstraint(item: infoWebView, attribute: .bottomMargin, relatedBy: .equal, toItem: cell.contentView, attribute: .bottomMargin, multiplier: 1, constant: 0)
            cell.contentView.addConstraints([height, width, leftConstraint, rightConstraint, bottomContraint])

            if let url = Bundle.main.url(forResource: "assets/html/about", withExtension: "html") {
                let urlRequest = URLRequest(url: url)
                infoWebView.load(urlRequest)
            }
        }
    }
    return cell;
}

加载html内容后,我通过以下方式确定内容的大小:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    if (self.webViewHeight != 0) {
        return;
    }
    self.infoWebView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
        if complete != nil {
            self.infoWebView.evaluateJavaScript("document.body.offsetHeight", completionHandler: { (height, error) in
                self.webViewHeight = height as! CGFloat
                let frame = CGRect(x: 0, y: 0, width: self.infoWebView.frame.width, height: self.webViewHeight);
                self.infoWebView.frame = frame;
                self.tableView.reloadRows(at: [IndexPath(row: 2, section: 0)], with: .automatic)
            })
        }

    })
}

在确定内容的大小后,我重新加载相应的单元格以应用新的高度。

到目前为止,这是有效的!调整单元格的高度以及WKWebView的大小。

我的问题是,现在WKWebView的内容只会在短时间内显示然后消失。

也许有人可以在这看到我的错误。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,发现使用.none进行tableview重载动画可以解决该问题。

self.tableView.reloadRows(at: [IndexPath(row: 2, section: 0)], with: .none)

面向面临类似问题的任何人。