UITableView:如何在插入行后“修复”当前单元格?

时间:2014-07-17 10:13:54

标签: ios uitableview

我有一个UITableView。我想在表格的顶部插入一些行。但插入后,旧电池被推下。

NSArray *indexPaths = @[[NSIndexPath indexPathForRow: 0 inSection: 0]];
[self.tableView insertRowsAtIndexPaths: indexPaths withRowAnimation: UITableViewRowAnimationNone];

例如: 插入之前:

  • 第1项
  • 第2项
  • 第3项
  • 第4项
  • 第5项
  • ...

插入后

  • 项目-5
  • 项目-4
  • 项目-3
  • ...
  • 第1项
  • 第2项
  • ...

我希望将第1项保留在原来的位置',例如:

插入后

  • 第1项
  • 第2项
  • 第3项
  • ...

新插入的单元格位于旧单元格上方(屏幕上未显示)。

2 个答案:

答案 0 :(得分:1)

尝试以下方法,

 [tableView scrollToRowAtIndexPath:value atScrollPosition:UITableViewScrollPositionTop animated:NO];

请注意,值将是indexPath,行数作为已添加的新行数。

创建indexPath使用,

[NSIndexPath indexPathForRow:inSection:]

答案 1 :(得分:0)

我自己解决了这个问题。我认为它更流畅,用户体验更好。

    for (Poi *poi in fetchedObjects) {
        [self.objects insertObject: poi atIndex: 0];
    }

    CGFloat totalHeight = 0;
    for (int i=0; i<fetchedObjects.count; ++i) {
        totalHeight += [self tableView: self.tableView heightForRowAtIndexPath: [NSIndexPath indexPathForRow: i inSection: 0]];
    }

    CGPoint currentContentOffset = self.tableView.contentOffset;
    currentContentOffset.y += totalHeight;
    [self.tableView reloadData];
    self.tableView.contentOffset = currentContentOffset;