ios - UITableView insertRows 不锁定主线程

标签 ios objective-c uitableview

我正在尝试像 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/

相关文章:

ios - objective-c presentViewController 位置

ios - 如何访问 "cell for row at indexpath"之外的 uitableview 单元格元素

iOS App 轮换导致卡顿

ios - 尝试分配除自身以外的委托(delegate)时出现解析错误

ios - 推送通知测试工作流程 [iOS]

ios - 在启动时禁用相机对焦

iphone - 动态添加和删除 UITableViewCells 到 UITableView

ios - 显示键盘时,Popover 内的 UIScrollView 内的 UITextView 不完全可见

objective-c - 从 cocoa mac osx 的根文件夹中删除文件

ios - 关闭 SKScene 后,内存仍然很高