UITableView 滚动刷新使单元格跳跃

Posted

技术标签:

【中文标题】UITableView 滚动刷新使单元格跳跃【英文标题】:UITableView scroll to refresh makes cells jump 【发布时间】:2013-10-17 20:03:17 【问题描述】:

我已经在作为主视图的子视图的表视图中实现了拉动刷新,如下所示:

UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.tableView;
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
tableViewController.refreshControl = self.refreshControl;

这会更新表格并且一切正常,我遇到的问题是当我触摸表格以拖动单元格时似乎随机向上移动到屏幕上方。当我从屏幕中间触摸并向下拖动时,或者如果我在单元格移回正常位置之前拉动,就会发生这种情况。这里有一些屏幕截图可以更好地绘制图片。请记住,所有这些都是在我向下拖动后拍摄的,但单元格向上移动。

应该是这样的:

细胞跳跃后实际上是这样的:

【问题讨论】:

请发布一些关于如何实际刷新单元格的代码。这行的重点是什么:`tableViewController.refreshControl = self.refreshControl;' 我能感受到你的痛苦。我很确定它与 UITableViewController 有关,但我还没有让刷新控件在普通的 UIViewController 中正常工作(contentInsets 搞砸了)。你有这方面的最新消息吗? @manmal 我确实通过在后台执行一些更新逻辑来使其正常工作。我也改用 UITableViewController 而不是嵌入的 UITableView。我将发布一个关于我的代码结构现在看起来如何解决问题的答案。 【参考方案1】:

对于可能遇到此问题或类似问题的任何人,我找到了一种方法来让滚动刷新非常顺利,并且不会导致我遇到的问题。我现在使用的是实际的 UITableViewController 而不是嵌入式 UITableView 这有助于解决一些滚动问题,但我仍然有一个问题,而不是动画关闭刷新图标(表格向上滑动以覆盖旋转的圆圈)它只是立即关闭,似乎很刺耳。我把我的刷新逻辑放在后台,让它完成,然后完成刷新。我的代码结构如下:

- (void)viewDidLoad 
    //set up refreshcontrol to call my refresh method


- (void)refresh 
    [self performSelectorInBackground:@selector(getUpdatedInfo) withObject:nil];

更新的信息运行,我的 TableViewController 是我的类的代表,它获取刷新的信息。收到所有信息并完成更新后,我在刷新的 TableViewController 类中调用委托方法,将接收到的数组放入表中,更新表,然后结束刷新。

- (void)didFinishingUpdatingWithArray:(NSArray *)array 
    //configure table sections
    //Save the data
    [self.tableview reloadData];
    [self.refreshControl endRefreshing];

【讨论】:

以上是关于UITableView 滚动刷新使单元格跳跃的主要内容,如果未能解决你的问题,请参考以下文章

具有动态单元格高度的 UITableView 的 reloadData() 导致跳跃滚动

Self Sizing Cells使UITableView跳跃

UITableView 滚动时卡顿和跳跃

iOS UITableView 向上滚动时滚动位置跳跃

UITableview刷新单元格在部分标题下滚动

滚动时如何使uitableview单元格不改变?