我有从网络加载内容的单元格,然后更新其内容。例如,将视图添加到链接的预览卡或图像的预览。
这意味着在初始加载和数据完成滴入之后,单元格的高度变化很大。
当滚动浏览这些单元格的UITableView时,单元格会弹出很多,有时卡在一个恒定的更新周期中,底部的单元格会加载,发现它没有内容,收缩,顶部有一个单元格滚动回视图,推下底部单元,加载,然后收缩;依此类推,导致UI锁定计算所有更改。
在UITableView中处理多个动态调整大小的单元格的更合适的方法是什么?
目前,UITableViewController是单元格的委托,如下所示:
protocol TweetCellDelegate {
// ...
func didChangeHeight(forCell: TweetCell)
// ...
}
class TweetCell: /* delegates */ {
var tweetDelegate: TweetCellDelegate?
func resized() {
self.tweetDelegate?.didChangeHeight(forCell: self)
}
}
class TweetsTableViewController: TweetCellDelegate {
func didChangeHeight(forCell: TweetCell) {
self.tableView.beginUpdates()
self.tableView.endUpdates()
}
}
每当有关图像或链接的新信息到达时, TweetCell
都会调用resized()
。如果数据被缓存,则尽可能多地收集这些数据,但可能会多次调用。