uitableviewcontroller uitableviewcell example iphone uitableview

iphone - uitableviewcell - uitableviewcontroller



Cómo desplazar un UITableView al tableFooterView (14)

Tengo un UITableView cuyos contenidos cambian dinámicamente, como una pila FIFO. Las células se agregan a la parte inferior y se eliminan de la parte superior.

Esto funciona a la perfección, y puedo desplazarme a indexPath para que el mensaje más nuevo siempre se desplace hacia abajo (como una aplicación de chat).

Ahora ... quiero agregar un pie de página a esa sección de la tabla. En lugar de usar

SrollToRowAtIndexPath

Me gustaría poder desplazarme hasta el tableFooterView.

Cualquier idea de cómo puedo hacer eso sería apreciada.


Este buen trabajo para mi!

CGRect footerBounds = [addCommentContainer bounds]; CGRect footerRectInTable = [tableview convertRect:footerBounds fromView:addCommentContainer]; [tableview scrollRectToVisible:footerRectInTable animated:YES];


Este trabajo para mí:

- (void)tableViewScrollToBottomAnimated:(BOOL)animated { NSInteger numberOfRows = [self.tableView numberOfRowsInSection:0]; if (numberOfRows) { if (self.tableView.tableFooterView) { [self.tableView scrollRectToVisible: self.tableView.tableFooterView.frame animated:YES ]; } else { [self.tableView scrollToRowAtIndexPath: [NSIndexPath indexPathForRow:numberOfRows-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:animated ]; } } }


Esto funciona para mí en Swift 4

func addRow() { tableView.beginUpdates() tableView.insertRows(at: [IndexPath(row: array.count - 1, section: 0)], with: .automatic) tableView.endUpdates() DispatchQueue.main.async { self.scrollToBottom() } } func scrollToBottom() { let footerBounds = tableView.tableFooterView?.bounds let footerRectInTable = tableView.convert(footerBounds!, from: tableView.tableFooterView!) tableView.scrollRectToVisible(footerRectInTable, animated: true) }


Estoy usando esto para desplazarme a la vista de pie de página de un tableView:

[self.tableView scrollRectToVisible:[self.tableView convertRect:self.tableView.tableFooterView.bounds fromView:self.tableView.tableFooterView] animated:YES];


Estoy usando esto:

- (void)scrollToBottom{ [self.myTable scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self.fetchedResultsController.fetchedObjects count] -1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

}


Gracias a iphone_developer aquí es lo que hice:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[tableView numberOfRowsInSection:0]-1 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Luego, mientras agrego filas, llamo a esto y la vista de pie de página de mi tableView sigue siendo visible


Gran idea, estaba buscando esto yo mismo :) Aquí está el código de ejemplo, que haría el truco:

[tableView reloadData]; NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:1]; [tableView scrollToRowAtIndexPath:index atScrollPosition:UITableViewScrollPositionBottom animated:YES];

DEBES tener al menos una celda en tu pie de tabla, el problema es que va a ser visible. ¿No tuvo tiempo de probar, pero supongo que podría hacerlo realmente pequeño?

Además, debe implementar las cosas correctas dentro de numberOfSectionsInTableView (al menos una para la tabla y otra para el pie de página), numberOfRowsInSection (al menos una para el pie de página, su última sección), viewForHeaderInSection (nil excepto su celda), heightForHeaderInSection (quizás si establece esto como cero), cellForRowAtIndexPath (agregar un caso especial para su celda en el pie de página) ...

Eso debería bastar.


La forma más fácil de hacer esto es usar UITableViewScrollPositionTop en la última fila en la última sección. Este trabajo es muy bueno para mi...

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:LAST_ROW inSection:LAST_SECTION] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Asegúrate de que la Vista de pie de tabla esté bien espaciada en la parte inferior y debe quedar bien animada dentro de la vista ...

Espero que esto ayude...


La mejor manera de desplazar un UITableView a la parte inferior de su footerView es simplemente establecer el desplazamiento del contenido. Puede calcular la parte inferior utilizando contentSize y los bounds actuales

Esta es la forma en que lo hago.

CGPoint newContentOffset = CGPointMake(0, [self.instanceOfATableView contentSize].height - self.instanceOfATableView.bounds.size.height); [self.instanceOfATableView setContentOffset:newContentOffset animated:YES];


Mi respuesta tardía es para el desarrollador, que necesita mostrar pie de página cuando se muestra el teclado. La solución correcta es considerar la propiedad contentInset (que se puede cambiar después de que se muestre el teclado), por lo que es muy fácil:

- (void)scrollToFooter { UIEdgeInsets tableInsets = self.tableView.contentInset; CGFloat tableHeight = self.tableView.frame.size.height - tableInsets.bottom - tableInsets.top; CGFloat bottom = CGRectGetMaxY(self.tableView.tableFooterView.frame); CGFloat offset = bottom - tableHeight; if(offset > 0.f) { [self.tableView setContentOffset:CGPointMake(0, offset) animated:YES]; } }

Debo notar que, en mi caso, se agregó tableView a mi propio ViewController y una de las celdas tiene UITextField que se convierte en el primer respondedor. Para mover el pie de página cuando se muestra el teclado, debe registrar la notificación del teclado y (en iOS7) realizar este método al final del ciclo de ejecución actual; en este caso, iOS7 automáticamente realiza scrollToRowAtIndexPath después de que no se muestren nuestro método y pie de página.

-(void)registerKeyboardNotification { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShown:) name:UIKeyboardDidShowNotification object:nil]; } - (void)keyboardDidShown:(id)notification { //move to the end of run loop [self performSelector:@selector(scrollToFooter) withObject:nil afterDelay:.0]; }


No lo he intentado, pero ¿qué sucede cuando se desplaza a la última fila + 1?

Otra idea sería agregar siempre una entrada ficticia al final y hacer que tenga un aspecto diferente para que se vea como un pie de página. Entonces siempre puedes desplazarte a eso.


Quizás algo como:

[tableView setContentOffset:CGPointMake(0, tableView.contentSize.height) animated:YES];


Tantas malas respuestas. :-)

La mejor manera:

[self.tableView scrollRectToVisible: self.tableView.tableFooterView.frame animated:YES ];


Ya que UITableView es una subclase de UIScrollView, puede desplazarse a donde quiera con el método UIScrollView.

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

Simplemente configura el rect de modo que cuando esté visible el pie de página esté visible, y tengas tu solución (puedes usar el rect o otra cosa, siempre y cuando tengas el comportamiento correcto todo el tiempo).