Ответ 1
Вы можете легко получить точное смещение вида таблицы, посмотрев его свойство contentOffset
. Для вертикальной прокрутки просмотрите:
tableView.contentOffset.y;
Есть ли способ узнать, какой UITableViewCell
находится в верхней части окна прокрутки?
Я хочу получить текущую позицию прокрутки, чтобы сохранить ее, когда приложение выходит. Когда приложение запускается, я хочу перейти к позиции, в которой он находился, когда он последний раз выходил.
Вы можете легко получить точное смещение вида таблицы, посмотрев его свойство contentOffset
. Для вертикальной прокрутки просмотрите:
tableView.contentOffset.y;
Принятое решение работает только в том случае, если вы знаете размер всех элементов представления таблицы. С автоматическим калибровкой/оцененным размером, который не всегда прав.
Один из вариантов - сохранить первый видимый элемент и прокрутить к нему.
Вы можете получить первый видимый элемент indexPath с помощью:
savedIndex = tableView.indexPathsForVisibleRows?.first
Затем перейдите к нему, выполнив:
tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false)
Убедитесь, что вы можете загрузить в 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];
}