2011-11-05 222 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動畫滾動保存的偏移量。
相關問題