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


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

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

3 68

3 ответа:

вы можете легко захватить точное смещение представления таблицы, Глядя на его 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];
}