【发布时间】:2016-11-11 06:19:32
【问题描述】:
我有一个UITableView,其中单元格是自定义的,并且单元格有一个带有图表的视图(Charts 库)。图表的数据非常大(它存储为 Controller 的属性),它会在几秒钟内出现。
我还在自定义 TableViewCell 类中的 setSelected 方法中进行了一些图表视图设置(只有很少的 UI 更改)
滚动表格视图时会出现一些滞后。我想这是因为我想显示大量内容。
在解决这个问题的过程中,我想到了四个解决方案:
加载
ViewDidAppear中的所有单元格,将它们保存到数组中,在CellForRowAt方法中显示该数组中的单元格。将表格视图放入滚动视图,使内容的高度相当大以适合表格视图中的所有单元格。
仅在单元格加载并显示其内容视图后才加载图表。在图表加载时显示活动指示器。
将图表的加载放在后台线程中。
在我看来,前两种方法在内存管理方面不太好。但我不确定,也许有我不知道的通用解决方案。
项目中的一些代码示例:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let graphCell = tableView.dequeueReusableCell(withIdentifier: Cells.graphViewCell) as! GraphViewCell
graphCell.lineChartView.data = track.chartDataForHeight()
return graphCell
}
这里的track 是变量,我在其中存储图表数据。
【问题讨论】:
-
主线程上的大量 UI 更新会影响 tableviewscroll。所以你的第 3 种方法会很好。第 4 种方法会有问题,因为所有 UI 更新都应该在主线程中完成
标签: ios swift uitableview ios-charts