ios uitableview ios7

¿Cómo desplazarse hacia arriba en IOS7 UITableView?



(12)

Aquí está la answer de idStar en la sintaxis actualizada de Swift 3:

self.tableView.contentOffset = CGPoint(x: 0, y: 0 - self.tableView.contentInset.top)

Con animación:

self.tableView.setContentOffset(CGPoint(x: 0, y: 0 - self.tableView.contentInset.top), animated: true)

En IOS6 tengo el siguiente código para desplazarme a la parte superior de una UITableView

[tableView setContentOffset:CGPointZero animated:YES];

En IOS7 esto ya no funciona. La vista de tabla no se desplaza completamente hacia la parte superior (pero casi).


Con la ayuda de algunas otras respuestas aquí, pude hacerlo funcionar. Para evitar un choque, primero debo verificar que haya algunas secciones. NsNotFound se puede usar como un índice de fila si la primera sección no tiene filas. Esperemos que esta sea una función genérica para colocar en UITableViewController:

-(void) scrollToTop { if ([self numberOfSectionsInTableView:self.tableView] > 0) { NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0]; [self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES]; } }


En iOS7, los componentes UITableView y UIScrollView de pantalla completa, de forma predeterminada, ajustan el contenido y desplazan las inserciones del indicador para que todo funcione. Sin embargo, como ha notado, CGPointZero ya no representa el desplazamiento de contenido que lo lleva a la "parte superior" visual.

Use esto en su lugar:

self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top);

Aquí, no tiene que preocuparse si tiene secciones o filas. Tampoco le dice a la vista de tabla que se dirija a la primera fila, y luego se pregunta por qué no mostró toda su vista de encabezado de tabla muy alta, etc.


Me doy cuenta de que esto ha sido respondido, pero solo quería dar otra opción:

CGRect frame = {{0, 0},{1, 1}}; [self.tableView scrollRectToVisible:frame animated:YES];

Esto siempre garantiza que UITableView se desplazará a la parte superior. La respuesta aceptada:

NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0]; [self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];

no funcionaba para mí porque estaba desplazándome a tableHeaderView y no a una celda.

Usar scrollRectToVisible funciona en iOS 6 y 7.


Prueba esto:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];


Según la respuesta aceptada de @Markus Johansson, aquí está la versión del código Swift:

func scrollToTop() { if (self.tableView.numberOfSections > 0 ) { let top = NSIndexPath(row: Foundation.NSNotFound, section: 0) self.tableView.scrollToRow(at: top as IndexPath, at: .top, animated: true); } }


Swift 3

Si tiene encabezados de vista de tabla, es posible que CGPointZero no funcione para usted, pero esto siempre funciona bien para desplazarse hacia arriba.

self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: false)


Swift 4 UITableViewExtension:

func scrollToTop(animated: Bool) { if numberOfSections > 0 { let topIndexPath = IndexPath(row: NSNotFound, section: 0) scrollToRow(at: topIndexPath, at: .top, animated: animated) } }


en veloz utilicé:

self.tableView.setContentOffset(CGPointMake(0, 0), animated: true)

pero @Alvin George''s funciona muy bien


todavía puede usar scrollToRowAtIndexPath: para el propósito


float systemVersion= [[[UIDevice currentDevice] systemVersion] floatValue]; if(systemVersion >= 7.0f) { self.edgesForExtendedLayout=UIRectEdgeNone; }

Pruebe este código en el método viewDidLoad() .


var indexPath = NSIndexPath(forRow: 0, inSection: 0) self.sampleTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true)

o

self.sampleTableView.setContentOffset(CGPoint.zero, animated:false)