工作後我有一個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
但他們的解決方案並沒有在我的情況下工作。
如何[self.tableView setContentOffset:newContentOffset動畫:NO]; –
工作。大聲笑 – Cbas
沒什麼可說的:| –