2009-08-05 15 views
9

Parece que el texto realmente no abarca varias líneas. Las alturas se ven correctas. ¿Qué me estoy perdiendo?¿Cómo puedo crear una UITableViewCell de tamaño variable?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"StatusCell"] autorelease]; 

    CGRect frame = cell.contentView.bounds; 
    UILabel *myLabel = [[UILabel alloc] initWithFrame:frame]; 
    myLabel.text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    [cell.contentView addSubview:myLabel]; 

    [myLabel release]; 

    return cell; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    NSString *text = [[person.updates objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; 
    CGSize withinSize = CGSizeMake(tableView.frame.size.width, 1000); 
    CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeWordWrap]; 

    return size.height + 20;  
} 

Además, ¿qué es lo que me falta que hace que las etiquetas aparezcan más largas que la celda de la tabla? alt text http://i31.tinypic.com/15chnjd.gif

Respuesta

15

Tweetero proporciona un ejemplo de esto en MessageListController.m. El código no emite la siguiente pantalla:

http://ec.mashable.com/wp-content/uploads/2009/04/imageshackscreen.jpg

(PIC es tomada desde Mashable).

El esquema de implementación básica:

  1. Cuando se construye un UITableViewCell, crear y añadir un UILabel como una vista secundaria de la manera mostrada en tableviewCellWithReuseIdentifier:. Busque la creación de la etiqueta TEXT_TAG.

  2. al enriquecimiento de la UITableViewCell con vistas, asegúrese de que la etiqueta de formato correctamente, como se hace en configureCell:forIndexPath, de manera similar buscar la etiqueta de la etiqueta TEXT_TAG.

  3. Regrese la altura adecuada para cada celda, como se hace en tableView:heightForRowAtIndexPath.

+0

Esto es genial. Gracias. –

2
myLabel.numberOfLines = 2; 

Comprobar la docs para la plena información sobre cómo utilizar esta propiedad.

+0

el problema es que no siempre va a ser un número específico, que va a cambiar para cada fila – Jason

+0

La propiedad numberOfLines establece el máximo ** ** número de líneas. Establecerlo a un alto valor. (Y, como dijo Rob, verifique los documentos). –

+2

También debe establecer myLabel.lineBrakeMode en UILineBreakModeWordWrap. –

0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return theSizeYouWantYourCellToBe; 
} 
Cuestiones relacionadas