2010-05-08 14 views

Respuesta

146

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

tableView.contentOffset.y; 
+1

Ese es un CGPoint en la vista de desplazamiento, no estoy seguro de cómo puedo decir a qué UITableViewCell corresponde. – progrmr

+15

No necesita la celda si usa el desplazamiento; simplemente configure el desplazamiento cuando vuelva a ingresar a la vista. Sin embargo, si DEBE conocer la celda en la parte superior, simplemente use: [tableView indexPathForRowAtPoint: CGPointMake (0, 0)]; –

+0

usando contentOffset funciona perfectamente, devuelve la posición de desplazamiento exactamente donde estaba cuando la aplicación se cerró por última vez. ¡Gracias! No necesitaba saber qué celda era, después de todo. – progrmr

2

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 hacia él.

Usted puede obtener la primera indexPath elemento visible con:

savedIndex = tableView.indexPathsForVisibleRows?.first 

y acceda a él haciendo:

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

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]; 
} 
Cuestiones relacionadas