簡體   English   中英

將單元格添加到UITableView的頂部

[英]Add cells to top of UITableView

我想在不移動可見單元格的情況下向表格視圖添加行,這與iPhone,Tweetbot和其他幾個推特類似。 到目前為止,我嘗試過的每種方法最終都可以實現這一目標,但是在兩者之間卻要進行時髦的動畫處理。 這是當前的解決方案,該解決方案可移動單元格,但最終最終停留在同一位置。

- (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];
}

嘗試這個:

  1. 像以前一樣記錄到第一個可見單元的偏移量
  2. 確保UITableView數據源已經包含新項目的數據。
  3. 使用UITableViewRowAnimationNoneUITableView上調用-insertRowsAtIndexPaths:withRowAnimation: 您可以一次性指定要插入的所有索引路徑。 插入的行數必須與新項目的數量匹配。
  4. 調用-setContentOffset:和以前一樣

避免在表視圖上調用-beginUpdates-endUpdates -endUpdates導致對原始單元進行動畫處理。

似乎單獨的insertRowsAtIndexPaths可以使單元動畫。 您可以嘗試這樣的解決方法:

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

您能否重新加載數據源,然后立即調用

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

您可能需要獲取可以處理的當前職位

[[tableview indexPathsForVisibleRows] objectAtIndex:0];

我還沒有測試過,所以我不是100%。

剛剛在此處發布了帶有代碼段的答案

在頂部插入行時使uitableview保持靜態

基本上:

  • 將滾動偏移量保存在您將要調用beginUpdate:的位置。
  • 代替對InsertCell的調用,將單元格的高度添加到已保存的偏移量中。
  • 在您將要調用endUpdate:的地方,調用reloadData,然后以NO動畫滾動保存的偏移量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM