我正在加载我的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的内容只会在短时间内显示然后消失。
也许有人可以在这看到我的错误。
答案 0 :(得分:0)
我遇到了同样的问题,发现使用.none进行tableview重载动画可以解决该问题。
self.tableView.reloadRows(at: [IndexPath(row: 2, section: 0)], with: .none)
面向面临类似问题的任何人。