¿Cómo puedo obtener la posición de desplazamiento de UITableView para poder guardarla?


¿Hay alguna manera de averiguar cuál UITableViewCell está en la parte superior de la ventana de desplazamiento?

Me gustaría obtener la posición de desplazamiento actual para poder guardarla cuando salga la aplicación. Cuando la aplicación se inicia quiero desplazarme a la posición en la que estaba cuando salió por última vez.

Author: jszumski, 2010-05-09

3 answers

Puede obtener fácilmente el desplazamiento exacto de la vista de tabla mirando su propiedad contentOffset. Para el desplazamiento vertical, mira:

tableView.contentOffset.y;
 151
Author: Ben Gottlieb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-30 04:44:58

La solución aceptada solo funciona si conoce el tamaño de todos los elementos de la vista de tabla. Con tamaño automático / tamaño estimado que no siempre es cierto.

Una alternativa es guardar el primer elemento visible y desplazarse hasta él.

Puede obtener el primer elemento visible indexPath con:

savedIndex = tableView.indexPathsForVisibleRows?.first

Luego desplácese hasta él haciendo:

tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false)
 4
Author: Heinrisch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-07 13:31:22

Asegúrese de que puede cargar en viewWillAppear y no viewDidLoad (probado iOS 9). viewWillAppear es cuando la vista ha terminado el diseño - hay diferencias en el resultado.

-(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
Author: coolcool1994,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-28 03:27:33