uitableviewcell source number example data iphone objective-c cocoa-touch

iphone - source - uitableviewcell swift 3



UITableView, desplácese hacia abajo al volver a cargar? (10)

Como esto es algo que quizás quieras usar muy a menudo, te sugiero que crees una extensión de clase en UITableView:

extension UITableView { func scrollToBottom(animated: Bool = true) { let section = self.numberOfSections if section > 0 { let row = self.numberOfRowsInSection(section - 1) if row > 0 { self.scrollToRowAtIndexPath(NSIndexPath(forRow: row - 1, inSection: section - 1), atScrollPosition: .Bottom, animated: animated) } } } }

Tengo una UITableView con cells que se actualizan dinámicamente. Todo funciona bien, aparte de cuando se llama a tableview.reload (ver a continuación) para actualizar las cells de la tabla. Me gustaría que la tabla se desplace hacia abajo para mostrar las nuevas entradas.

- (void)reloadTable:(NSNotification *)notification { NSLog(@"RELOAD TABLE ..."); [customTableView reloadData]; // Scroll to bottom of UITable here .... }

Estaba planeando usar scrollToRowAtIndexPath:atScrollPosition:animated: pero luego noté que no tengo acceso a un indexPath .

¿Alguien sabe cómo hacer esto, o de una devolución de llamada delegate que podría usar?


Esta es la mejor manera.

- (void)scrollToBottom { CGFloat yOffset = 0; if (self.tableView.contentSize.height > self.tableView.bounds.size.height) { yOffset = self.tableView.contentSize.height - self.tableView.bounds.size.height; } [self.tableView setContentOffset:CGPointMake(0, yOffset) animated:NO]; }


Esta es otra solución, funcionó bien en mi caso, cuando la altura de la celda es grande.

- (void)scrollToBottom { CGPoint bottomOffset = CGPointMake(0, _bubbleTable.contentSize.height - _bubbleTable.bounds.size.height); if ( bottomOffset.y > 0 ) { [_bubbleTable setContentOffset:bottomOffset animated:YES]; } }


Otra solución es voltear la mesa verticalmente y voltear cada celda verticalmente:

Aplica la transformación a UITableView al inicializar:

tableview.transform = CGAffineTransformMakeScale(1, -1);

y en cellForRowAtIndexPath:

cell.transform = CGAffineTransformMakeScale(1, -1);

De esta manera, no necesita soluciones para desplazarse por problemas, pero deberá pensar un poco más acerca de las interacciones contentInsets / contentOffsets y header / footer.


Utilizar:

NSIndexPath* ipath = [NSIndexPath indexPathForRow: cells_count-1 inSection: sections_count-1]; [tableView scrollToRowAtIndexPath: ipath atScrollPosition: UITableViewScrollPositionTop animated: YES];

O puede especificar el índice de sección manualmente (Si una sección => índice = 0).


la extensión es mejor para hacer en UIScrollView en lugar de UITableView, de esta manera funciona en scrollView, tableView, collectionView (vertical), UIWebView (vista de desplazamiento interno), etc.

public extension UIScrollView { public func scrollToBottom(animated animated: Bool) { let rect = CGRectMake(0, contentSize.height - bounds.size.height, bounds.size.width, bounds.size.height) scrollRectToVisible(rect, animated: animated) } }


prueba este código, puede ayudarte:

self.tableView.reloadData() DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+0.1, execute: { let indexPath = IndexPath(row: self.dateSource.count-1, section: 0) self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.bottom, animated: true) })


Swift 3

Para todas las personas que intentan encontrar la manera de resolver este problema, la clave es llamar al método .reloadData() después de .reloadData() :

tableView.reloadData() tableView.layoutIfNeeded() tableView.setContentOffset(CGPoint(x: 0, y: tableView.contentSize.height - tableView.frame.height), animated: false)

Estaba trabajando con múltiples secciones en UITableView y funcionó bien.


-(void)scrollToBottom{ [self.tableView scrollRectToVisible:CGRectMake(0, self.tableView.contentSize.height - self.tableView.bounds.size.height, self.tableView.bounds.size.width, self.tableView.bounds.size.height) animated:YES]; }


//In swift var iPath = NSIndexPath(forRow: self.tableView.numberOfRowsInSection(0)-1, inSection: self.tableView.numberOfSections()-1) self.tableView.scrollToRowAtIndexPath(iPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)