web-dev-qa-db-fra.com

Comment puis-je obtenir la position de défilement UITableView afin de pouvoir l'enregistrer?

Existe-t-il un moyen de savoir quel UITableViewCell se trouve en haut de la fenêtre de défilement?

J'aimerais obtenir la position de défilement actuelle afin de pouvoir l'enregistrer à la fermeture de l'application. Lorsque l'application démarre, je veux faire défiler jusqu'à la position où elle se trouvait lors de sa dernière fermeture.

70
progrmr

Vous pouvez facilement saisir le décalage exact de la vue de table en consultant sa propriété contentOffset. Pour le défilement vertical, regardez:

tableView.contentOffset.y;
157
Ben Gottlieb

La solution acceptée ne fonctionne que si vous connaissez la taille de tous les éléments de la vue tabulaire. Avec un dimensionnement automatique/une taille estimée qui n'est pas toujours vrai.

Une alternative consiste à enregistrer le premier élément visible et à y accéder.

Vous pouvez obtenir le premier indexPath de l'élément visible avec:

savedIndex = tableView.indexPathsForVisibleRows?.first

Faites ensuite défiler jusqu'à celui-ci en faisant:

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

Assurez-vous que vous pouvez charger dans viewWillAppear et non viewDidLoad (testé iOS 9). ViewWillAppear est lorsque la vue a terminé la mise en page - il y a des différences dans le résultat.

-(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];
}
1
coolcool1994