Comment puis-je obtenir la position de défilement UITableView pour pouvoir la sauvegarder?

Est-il possible de savoir quel UITableViewCell trouve en haut de la fenêtre de défilement?

Je voudrais obtenir la position de défilement actuelle pour pouvoir la sauvegarder lorsque l’application se termine. Lorsque l’application démarre, je veux faire défiler la position à laquelle elle se trouvait lors de sa dernière sortie.

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; 

La solution acceptée ne fonctionne que si vous connaissez la taille de tous les éléments de vue de table. Avec dimensionnement automatique / taille estimée, ce n’est pas toujours vrai.

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

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

 savedIndex = tableView.indexPathsForVisibleRows?.first 

Faites ensuite défiler jusqu’à cela en faisant:

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

Assurez-vous de pouvoir charger viewWillAppear et non viewDidLoad (iOS 9 testé). ViewWillAppear est lorsque la présentation 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]; }