UITableView insertRows没有锁定主线程

时间:2013-12-12 16:56:26

标签: ios objective-c uitableview

我正试图像Facebook应用程序那样实现无限滚动。

似乎Facebook以某种方式插入行或重新加载表格视图而不停止当前滚动。

有谁知道他们是如何实现这一目标的?

当我在滚动期间调用插入行或重新加载数据时,滚动停止。任何帮助将不胜感激。

没有太多代码可以提供典型的UITableView功能。

[self.tableView insertRowsAtIndexPaths:self.paths withRowAnimation:UITableViewRowAnimationNone];

[self.tableView reloadData];

self.paths是最近通过下一页请求添加的路径。

我还添加了以下方法

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath; 

现在正在调用reloadData时正常工作。不幸的是,即使加速细胞的加速,它仍会锁定当前的滚动。

1 个答案:

答案 0 :(得分:1)

好的,就当前活动卷轴的停止而言,问题归结为一行代码。解决方案同样很小。

我的TableView对它有一个刷新控件。在我收到TableView的下一组数据的方法中,我将调用以下内容。

         [refreshControl endRefreshing];

我的假设是,如果它没有令人耳目一新,那么endRefreshing根本就什么都不做。

嗯......显然事实并非如此。当你在不刷新它的刷新控件上调用endRefreshing时,将停止tableview滚动。我的修复如下。

     if(refreshControl.isRefreshing){
         [refreshControl endRefreshing];
     }

现在滚动在下一次加载后继续,尽管有一些延迟。这种延迟当然更容易调试。

这只是计算所添加单元格高度所涉及的开销,在调用重载时调用所有单元格,除非你有

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;

所以现在我已经把所有事情都弄清楚了,是时候创造一种有效的方法来计算一个合理接近的估计高度。