У меня есть UITableViewController
и когда пользователь прокручивает к вершине, я хочу, чтобы добавить кучу клеток выше первой ячейки, не затрагивая текущую позицию прокрутки (так же, как Шеззаде)не setContentOffset работать после обновления данных
I знаю, что я могу использовать 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] ;; –
, который сработал. lol – Cbas
ничего не сказал: | –