Как я могу получить позицию прокрутки UITableView, чтобы сохранить ее?

Есть ли способ узнать, какой UITableViewCell находится в верхней части окна прокрутки?

Я хочу получить текущую позицию прокрутки, чтобы сохранить ее, когда приложение выходит. Когда приложение запускается, я хочу перейти к позиции, в которой он находился, когда он последний раз выходил.

Ответ 1

Вы можете легко получить точное смещение вида таблицы, посмотрев его свойство contentOffset. Для вертикальной прокрутки просмотрите:

tableView.contentOffset.y;

Ответ 2

Принятое решение работает только в том случае, если вы знаете размер всех элементов представления таблицы. С автоматическим калибровкой/оцененным размером, который не всегда прав.

Один из вариантов - сохранить первый видимый элемент и прокрутить к нему.

Вы можете получить первый видимый элемент indexPath с помощью:

savedIndex = tableView.indexPathsForVisibleRows?.first

Затем перейдите к нему, выполнив:

tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false)

Ответ 3

Убедитесь, что вы можете загрузить в viewWillAppear, а не viewDidLoad (проверено iOS 9). ViewWillAppear - это когда представление завершено, разница - в результатах.

-(void) viewWillAppear:(BOOL)animated {
    NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults];
    [self.tableView setContentOffset:CGPointMake(0, [lightData floatForKey:@"yValue"])];
}

-(void) viewWillDisappear:(BOOL)animated {
    NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults];
    [lightData setFloat:self.tableView.contentOffset.y forKey:@"yValue"];
    [lightData synchronize];
}