2016-02-29 28 views
2

工作後我有一個UITableViewController和當用戶滾動到頂部,我要添加一串單元中的第一單元上方,而不會影響當前的滾動位置(就像的iMessage)setContentOffset不更新數據

我知道我可以使用insertRowsAtIndexPaths在不重新加載數據的情況下執行此操作,但我只想以最簡單的方式首先執行此操作。所以我覆蓋數據並調用reload,然後調用setContentOffset,但無論我設置了偏移量,表格總是回到頂端。

// in an NSNotification handler 
//... 
dispatch_async(dispatch_get_main_queue(), ^{ 

    // get old content height 
    CGSize oldContentSize = self.tableView.contentSize; 
    NSLog(@"old content height: %f", oldContentSize.height); 

    // update tableView data 
    self.messages = updatedMessages; 
    [self.tableView reloadData]; 

    // get new content height 
    CGSize newContentSize = self.tableView.contentSize; 
    NSLog(@"new content height: %f", newContentSize.height); 

    // move to user scroll position 
    CGPoint newContentOffset = CGPointMake(0, newContentSize.height - oldContentSize.height); 
    [self.tableView setContentOffset:newContentOffset]; 
}); 

當我運行此我得到:

old content height: 557.765625 
new content height: 1249.050781 

但恢復的tableView到頂部,而不是保持其滾動位置。

我發現如果我打電話[self.tableView setContentOffset:newContentOffset animated:YES];它總是滾動到正確的位置,但運動是不可接受的。

如何在重新加載tableView數據後保持滾動位置?

我已經看了這些:

setContentOffset only works if animated is set to YES

UIScrollView setContentOffset: animated: not working

UITableView contentOffSet is not working properly

但他們的解決方案並沒有在我的情況下工作。

+1

如何[self.tableView setContentOffset:newContentOffset動畫:NO]; –

+0

工作。大聲笑 – Cbas

+0

沒什麼可說的:| –

回答

1

試試這個

[self.tableView setContentOffset:newContentOffset animated:NO]