我正在尝试像 Facebook 应用程序那样实现无限滚动。
Facebook 似乎正在以某种方式插入行或重新加载表格 View 而不停止当前滚动。
有人知道他们是如何实现这一目标的吗?
当我在滚动期间调用插入行或重新加载数据时,滚动会停止。任何帮助将不胜感激。
没有太多代码来提供典型的 UITableView 功能。
[self.tableView insertRowsAtIndexPaths:self.paths withRowAnimation:UITableViewRowAnimationNone];
或
[self.tableView reloadData];
self.paths
是最近通过下一页请求添加的路径。
我还添加了以下方法
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;
现在调用 reloadData 可以正常工作。不幸的是,即使这加快了单元格的添加速度,它仍然锁定当前滚动。
最佳答案
好的,就停止当前事件的滚动而言,问题归结为一行代码。而且解决方案也同样小。
我的 TableView 上有一个刷新控件。在接收 TableView 的下一组数据的方法中,我将调用以下代码。
[refreshControl endRefreshing];
我的假设是,如果不刷新,endRefreshing 将什么都不做。
嗯...显然事实并非如此。当您在不刷新的刷新控件上调用 endRefreshing 时,它会停止 tableview 滚动。我的修复如下。
if(refreshControl.isRefreshing){
[refreshControl endRefreshing];
}
现在滚动在下一次加载后继续,尽管有一些延迟。当然,这种延迟更容易调试。
这只是计算要添加的单元格的高度所涉及的开销,除非您有,否则在调用重新加载时会在所有单元格上调用该高度
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;
现在我已经把所有事情都整理好了,是时候创建一种有效的方法来计算一个合理接近的估计高度了。
关于ios - UITableView insertRows 不锁定主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549475/