我有一个UITableView,其中包含一个包含UIWebView的自定义单元格。我试图在webview完成加载html内容后重新加载具有正确高度的单元格。
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
height = tableView.frame.size.height - tableView.contentSize.height
return height
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell!
cell = tableView.dequeueReusableCellWithIdentifier("bodyFieldCellIdentifier", forIndexPath: indexPath)
(cell as! SMBodyTableViewCell).frame = CGRect(x: 0, y: 0, width: width, height: height)
(cell as! SMBodyTableViewCell).bodyWebView.delegate = self
(cell as! SMBodyTableViewCell).bodyWebView.loadHTMLString(self.messageBody, baseURL: nil)
(cell as! SMBodyTableViewCell).bodyWebView.tag = indexPath.row
}
在webViewDidFinishLoad委托方法中,我尝试重新加载包含webview的单元格。
func webViewDidFinishLoad(aWebView: UIWebView) {
let indexPath = NSIndexPath(forRow: aWebView.tag, inSection: 0)
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
当我运行应用程序时,包含webview的单元格会不断重新加载。高度似乎是正确的,并且根据需要,但你可以看到细胞重新加载不停。我似乎无法弄清楚为什么它不断重新加载。我加载的HTML内容是简单的HTML,没有多个/无限帧,因此连续调用webViewDidFinishLoad。我也尝试在webViewDidLoad中重新计算和设置单元格的高度,但高度似乎没有正确计算。
答案 0 :(得分:0)
当webViewDidFinishLoad你可以通过webview.scrollView.contentSize.height得到高度,然后调用reloadRowsAtIndexPaths
答案 1 :(得分:0)
当然,它会不断重新加载。这就是你写的要做的事情。
每次加载单元格时,都会触发要加载的单元格内的Web视图。
当加载完成时,它会调用webViewDidFinishLoad
,您可以在其中触发相同单元格的重新加载。然后调用cellForRowAtIndexPath
,触发Web视图加载AGAIN。等等。
您reloadRowsAtIndexPaths
中的webViewDidFinishLoad
无需拨打电话。 Web视图应该自动更新它的内容,而无需您做任何事情。