使用新行动态加载 UITableView
Dynamically loading UITableView with new rows
我已经搜索过了,但还没有得出明确的答案。
我有一个类似于 Facebook 和 Instagram 的应用程序,一旦你到达 UITableView
的底部,它就会调用一个网络服务并加载另外 25 行数据。
我面临的问题是,在加载新的 25 件时,我正在调用 reloadData
,这会导致令人不快的 UI 闪烁。
在 UITableView 滚动时将新数据动态添加到不闪烁的正确方法是什么(也就是不调用 reloadData
?
将新行项添加到数据源后,您需要使用 [tableView beginUpdates];
和 [tableView endUpdates];
而不是 reloadData
。
NSMutableArray *indexPathsToAdd = [NSMutableArray new];
for (Object *object in currentObjects)
{
if (![newObjects containsObject:object]) {
int row = [currentObjects indexOfObject:object];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
[indexPathsToAdd addObject:indexPath];
}
}
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:indexPathsToAdd withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
我已经搜索过了,但还没有得出明确的答案。
我有一个类似于 Facebook 和 Instagram 的应用程序,一旦你到达 UITableView
的底部,它就会调用一个网络服务并加载另外 25 行数据。
我面临的问题是,在加载新的 25 件时,我正在调用 reloadData
,这会导致令人不快的 UI 闪烁。
在 UITableView 滚动时将新数据动态添加到不闪烁的正确方法是什么(也就是不调用 reloadData
?
将新行项添加到数据源后,您需要使用 [tableView beginUpdates];
和 [tableView endUpdates];
而不是 reloadData
。
NSMutableArray *indexPathsToAdd = [NSMutableArray new];
for (Object *object in currentObjects)
{
if (![newObjects containsObject:object]) {
int row = [currentObjects indexOfObject:object];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
[indexPathsToAdd addObject:indexPath];
}
}
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:indexPathsToAdd withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];