【问题标题】:reloadData only on tableView visible cellsreloadData 仅在 tableView 可见单元格上
【发布时间】:2011-06-22 20:14:47
【问题描述】:

这可能吗?仅重新加载可见的单元格以提高效率。

【问题讨论】:

  • 提供一些上下文怎么样?什么语言/框架/库/什么?
  • 抱歉。我正在使用 Objective-C 语言(iOS SDK 4.0)进行编程

标签: ios uitableview reloaddata


【解决方案1】:

这就是默认情况下表格视图的工作方式。 UITableView 类在单元格即将出现在屏幕上之前从不加载单元格,即使您调用 reloadData

【讨论】:

  • jlehr@你能提供任何参考吗
  • 将加载(和创建)尽可能多的与滚动视图的框架相交的单元格,即使框架的某些部分不可见。当然,这只发生在某些情况下,表格视图本身是另一个滚动视图的子视图,并且框架的大小将与其内容大小匹配,并且表格视图的滚动将被禁用并通过嵌入滚动视图实现。
  • 由于单元格预取,这在 iOS 10 中已经过时。 Post iOS 10 cellForRow 在单元格可见之前被调用。
  • 不,这是一个错误的答案。在很多情况下,您不能使用reloadData。例如,如果您插入/删除带有动画reloadata 的行会破坏此动画
【解决方案2】:

试试这个,你可以使用reloadRowsAtIndexPaths:重新加载tableview的任何单元格

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows]
                 withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

【讨论】:

  • 我发现只有以下地方可以使用 'reloadRowsAtIndexPaths': - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath - (IBAction) unwindToMealList: (UIStoryboardSegue *) sender跨度>
【解决方案3】:

在 Swift 3.0 中重新加载 tableview 的可见单元格:

guard let visibleRows = pTableView.indexPathsForVisibleRows else { return }

pTableView.beginUpdates()

pTableView.reloadRows(at: visibleRows, with: .none)

pTableView.endUpdates()

【讨论】:

  • 这是正确答案。但请注意 indexPathsForVisibleRows 对于空 tableViews 的 nil。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多