2011-11-05 179 views
0

我想向不添加可见单元格的表格视图添加行,这与iPhone的Twitter,Tweetbot和其他几个类似。我迄今为止尝试过的每种方法最终都可以实现,但它们之间会做出时髦的动画。这是目前的解决方案,它可以移动单元格,但最终会停留在同一个地方。将单元格添加到UITableView顶部

- (void)controllerDidChangeContent:(NSFetchedResultsController*)controller 
{ 
    UITableViewCell *referenceCell; 
    if ([self.tableView.visibleCells count] > 0) { 
     referenceCell = [self.tableView.visibleCells lastObject]; 
    } 
    CGFloat offset = referenceCell.frame.origin.y - self.tableView.contentOffset.y; 

    [self.tableView endUpdates]; 

    [self.tableView setContentOffset:CGPointMake(0.0, referenceCell.frame.origin.y - offset) animated:NO]; 
} 
+0

重要的是要注意,如果我删除endUpdates(和相关的表更新代码)并将其替换为完整的表刷新,它确实有效。但是,这不是非常有效。 –

回答

0

你能不能重新加载数据源,并立即拨打

[tableview selectRowAtIndexPath: animated:NO scrollPosition:<#(UITableViewScrollPosition)#>]; 

你可能需要获得当前位置,你可以用

我没有做虽然测试了这一点,所以我不是100%。

+0

即使这样做确实有效,它只会在大球场上出现,但这个单元并不会在同一个位置。此外,它不起作用。 –

1

试试这个:

  1. 记录偏移到第一个可见的细胞像以前一样
  2. 确保UITableView的数据源已经包含了对新项目的数据。
  3. 致电-insertRowsAtIndexPaths:withRowAnimation:UITableViewUITableViewRowAnimationNone。您可以指定要一次插入的所有索引路径。插入的行数必须与新项目的数量相匹配。
  4. 呼叫-setContentOffset:就像避免对表视图调用-beginUpdates-endUpdates

-endUpdates会导致为原始单元格完成动画。

似乎只有insertRowsAtIndexPaths可以动画单元格。你可以尝试一种解决方法是这样的:

for (UITableViewCell *cell in [tableView visibleCells]) 
{ 
    [cell.layer removeAllAnimations]; 
} 
+0

即使没有开始和ind更新它仍然动画行和内容偏移量。 –

0

刚刚张贴在这里的代码片断

Keep uitableview static when inserting rows at the top

基本上是一个答案:

  • 保存滚动偏移量,你会叫的BeginUpdate :。
  • 代替调用InsertCell,将单元格的高度添加到保存的偏移量。
  • 如果您要调用endUpdate:,请调用reloadData,然后使用NO动画滚动保存的偏移量。
相关问题