No hay otro mecanismo para especificar altura de la celda de heightForRowAtIndexPath. A menos que esté contabilizando correctamente la celda expandida en ese método, encontrará que sus otras celdas la están pasando o están escondidas debajo de ella. Desde un código absurdo donde olvidé configurar heightForRowAtIndexPath, estoy bastante seguro de que se mostrarán las otras celdas sobre él.
Dado que estamos hablando de miles de filas, supondremos que el usuario no puede reorganizar las celdas.
Lo que podría hacer es almacenar la ruta de índice de la celda expandida cuando el usuario toca una celda determinada. Entonces, heightForRowAtIndexPath podría tener este aspecto:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if ([indexPath isEqual:lastSelectedIndexPath])
{
return 80;
}
else {
return 44;
}
}
Si realmente desea seleccionar varias opciones, se podría almacenar las rutas de índice correspondientes a una matriz y comprobar por ellos así:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
CGFloat cellHeight = 44;
for (NSIndexPath *expandedIndexPath in expandedIndexPathsArray)
{
if ([indexPath compare:expandedIndexPath] == NSOrderedSame)
{
cellHeight = 80;
break;
}
}
return cellHeight;
}
Conseguir que la animación mirar a la derecha llevará algo de trabajo. He jugado con esta idea de IU en particular por un tiempo y nunca pude sentarme y realmente hacer que suceda. Una cosa que podría hacer es mostrar una vista ficticia que se anima mientras está actualizando la vista de tabla detrás de ella.
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation
podrían ser de interés para esta medida que podría ser capaz de utilizar las animaciones celulares para simular el movimiento de las células a continuación para dar cabida a su expansión.
Si puede renunciar a animar el cuadro de la celda por completo, puede hacer una animación de opacidad de los datos expandidos una vez que se haya establecido la nueva altura.
Es difícil, pero si lo haces funcionar, apuesto a que será genial. Buena suerte.
Gracias Danilo, me pusiste en el camino correcto. Terminé haciéndolo funcionar usando reloadRowsAtIndexPaths dentro de didSelectRowAtIndexPath. Verifico si la celda está expandida y configuré la altura correspondiente en heightForRowAtIndexPath, tal como lo mencionó. ¡Gracias de nuevo! – Justin
¡Demasiado genial! Me alegro de darle un empujoncito útil. Espero que funcione. Quizás finalmente lo probaré uno de estos días. –
'[indexPath compare: expandedIndexPath] == NSOrderedSame' debe escribirse como' [indexPath isEqual: expandedIndexPath] ' – user102008