2009-06-01 9 views
4

Je souhaite que la taille de ma cellule change en fonction du texte affiché. Le texte variera et je veux essentiellement que les cellules changent de taille. Voici ce que j'ai jusqu'à présent:Modification de la hauteur de la cellule dans la vue de table Objectif C

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DefaultCell1"]; 
    CGRect cellRectangle; 
    if (cell == nil) { 

    cellRectangle = CGRectMake(0.0, 0.0, 300, 110); 
    cell = [[[UITableViewCell alloc] initWithFrame:cellRectangle reuseIdentifier:@"DefaultCell1"] autorelease]; 
    } 

    UILabel *label; 
    cellRectangle = CGRectMake(10, (40 - 20)/2.0, 280, 110); 

    //Initialize the label with the rectangle. 
    label = [[UILabel alloc] initWithFrame:cellRectangle]; 
    label.lineBreakMode = UILineBreakModeWordWrap; 
    label.numberOfLines = 20; 

    label.font = [UIFont fontWithName:@"Helvetica" size:11.0]; 
    label.text = [[self.person.statusMessages objectAtIndex:indexPath.row] valueForKey:@"text"]; 
    CGFloat height = [label.text sizeWithFont:label.font].height; 

    //So right here is where I think I need to do something with height and 
    //see it to something tied to he cell 

    [cell.contentView addSubview:label]; 

    [label release]; 

    return cell; 
} 
+0

double possible de [Création d'un UITableView avec Taller cellules sur l'iPhone] (http://stackoverflow.com/questions/410224/creating- a-uitableview-with-taller-cells-on-the-iphone) – outis

Répondre

8

Vous ne devez pas définir la hauteur dans la méthode cellForRowAtIndexPath. Il existe une autre méthode UITableViewDatasource appelée tableView: heightForRowAtIndexPath: que vous devez implémenter pour renvoyer la hauteur de la cellule. Soyez prudent en utilisant cela cependant; vous ne devez pas obtenir la cellule à ce chemin d'index dans cette méthode; Si vous le faites, vous construisez une boucle récursive infinie.

Modifier: pour être clair; Vous devez calculer la hauteur de la cellule uniquement en fonction de son contenu et non de la cellule elle-même.

De même, dans votre code où vous créez la cellule, vous pouvez simplement transmettre CGRectZero à l'argument frame; la vue de table calculera le cadre de la cellule lui-même si vous le faites (et le passage explicite dans le cadre est obsolète dans OS 3.0 si je me souviens correctement).

+0

"vous devez calculer la taille de la cellule uniquement en fonction de son contenu" Je connais le contenu de ma cellule. Ce sont des étiquettes qui sont définies dans "TableView cellForRowAtIndexPath". Comment changer la taille de la cellule du tableau? –

3

Si toutes les lignes sont de la même hauteur, ce qui est vrai dans votre cas, vous pouvez définirRowHeight dans votre tableview Controller.

- (id)initWithStyle:(UITableViewStyle)style { 
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization. 
     NSLog(@"%s", __FUNCTION__); 
     [self.tableView setRowHeight:110]; 
    } 
    return self; 
} 

La largeur de ligne peut être contrôlée par superview de la table largeur

Questions connexes