2015-04-08 2 views
4

Мне нужно перезагрузить табличное представление, но каким-то образом я хочу сохранить положение прокрутки. Любой способ сделать это? Может быть, хранить смещение содержимого и в viewDidLayoutSubviews Я должен его сбросить?Это способ сохранить contentOffset после перезагрузки tableview?

ответ

3

ТаблицаView не сбрасывает положение прокрутки. Он поддерживает смещение содержимого даже после вызова функции reloadData. Так что ничего не нужно делать, если вы хотите сохранить позицию пикселя.

Если вы изменяете высоту строки во время перезагрузки данных или изменения источника данных, вы можете использовать метод scrollToRowAtIndexPath:atScrollPosition:animated:.

0

просто позвоните scrollToRowAtIndexPath:atScrollPosition:animated:, прежде чем использовать reloadData (с анимацией: НЕТ)

Кроме того, будьте осторожны, в случае, если у вас меньше клеток в обновленном Tableview для предотвращения аварий.

Надеется, что это помогает

0

После перезагрузки вида таблицы необходимо вызвать TableView МЕТОД scrollToRowAtIndexPath:atScrollPosition:animated:

Просто укажите путь индекса, выделите позицию, которая может быть одним из следующего

UITableViewScrollPositionNone, 
UITableViewScrollPositionTop,  
UITableViewScrollPositionMiddle, 
UITableViewScrollPositionBottom 

и YES/NO в анимированном параметре.

0

Вы можете сохранить текущее смещение перед загрузкой таблицы использовать этот метод, чтобы сохранить текущее смещение

self.tableView.contentOffset.y 

Или вы можете перезагружать, как это будет Обновить таблицу из вашего текущего смещения Попробуйте это:

[UIView animateWithDuration:0.1 delay:0 options:0 animations:^{ 
    self.tableView.contentOffset = CGPointMake(0, currentOffset); 
} completion:^(BOOL finished) { 
    [self.tableView reloadData]; 
}]; 
Смежные вопросы