UITableView reloadRowsAtIndexPaths不断重新加载单元格

时间:2016-06-21 01:57:12

标签: ios swift uitableview uiwebview

我有一个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中重新计算和设置单元格的高度,但高度似乎没有正确计算。

2 个答案:

答案 0 :(得分:0)

当webViewDidFinishLoad你可以通过webview.scrollView.contentSize.height得到高度,然后调用reloadRowsAtIndexPaths

答案 1 :(得分:0)

当然,它会不断重新加载。这就是你写的要做的事情。

每次加载单元格时,都会触发要加载的单元格内的Web视图。 当加载完成时,它会调用webViewDidFinishLoad,您可以在其中触发相同单元格的重新加载。然后调用cellForRowAtIndexPath,触发Web视图加载AGAIN。等等。

reloadRowsAtIndexPaths中的webViewDidFinishLoad无需拨打电话。 Web视图应该自动更新它的内容,而无需您做任何事情。