2008-11-07 7 views
9

Tengo una celda UITableView que tendrá un tamaño variable dependiendo de su contenido (posiblemente varias líneas de texto).¿Existe alguna forma mejor de determinar el tamaño correcto para una UITableViewCell?

ya que parece que se llama heightForRowAtIndexPath antes de que la célula Layout, acabo de adivinar la altura correcta llamando [NSString sizeWithFont] en mi cadena de texto. ¿Hay una mejor manera de establecer la altura después de He presentado el texto en la celda y tengo una idea de qué tamaño debería ser exactamente?

Respuesta

8

Se va a sonar tonto, pero ... eh ... "la disposición de su celular antes de salir de heightForRowAtIndexPath";)

serio, sin embargo - el sistema operativo sólo alguna vez llama a esto si va a ser necesario (como en: se trata de crear la celda & mostrarlo en la pantalla), por lo que la disposición & preparándose para mostrar no se desperdicia esfuerzo.

Nota, usted hace no tiene que hacer su diseño por separado, lógicamente. Simplemente haga una llamada a su [self prepLayoutForCellAtIndex: index] dentro de su rutina heightForRowAtIndexPath.

Si los datos son estáticos, puede crear una tabla de altura y almacenar en caché la información.

if (0 == heightTable[index]) { 
    heightTable[index] = [self prepLayoutForCellAtIndex:index]; 
} 
return (heightTable[index]); 

Heck, incluso si los datos cambian, puede volver a calcular el valor de la tabla en el método que cambia los datos, o clara a 0 por lo que recibe recalcula la próxima vez que sea necesario.

4

uso el siguiente, por lo general:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { 
UITableViewCell *cell = [self tableView: tableView cellForRowAtIndexPath: indexPath]; 
return cell.bounds.size.height; 

}

Tenga en cuenta que yo uso esto en tablas donde pre-caché de un montón de filas antes de tiempo, no para aquellos con una gran cantidad de Células. Sin embargo, para cosas como las tablas de Configuración, donde hay solo unas pocas filas, pero muy probablemente de diferente tamaño, funciona bien. Para tablas más grandes, hago algo en la línea de lo que sugirió Olie.

0

Si mira SMS.app como ejemplo, Apple guarda el alto de fila de la celda en la base de datos sqlite de SMS.app.

Cuestiones relacionadas