2009-06-01 11 views
4

Ich möchte, dass sich die Höhe meiner Zelle abhängig vom darin angezeigten Text ändert. Der Text wird variieren und ich möchte im Grunde, dass die Zellen ihre Größe ändern. Hier ist, was ich bisher habe:Ändern der Zellenhöhe in der Tabellenansicht Ziel 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

möglich Duplikat [Erstellen eines UITableView mit Taller Zellen auf dem iPhone] (http://stackoverflow.com/questions/410224/creating- gesteuert werden a-uitableview-with-taller-cells-auf-dem-iphone) – outis

Antwort

8

Sie sollten die Höhe nicht in der CellForRowAtIndexPath-Methode festlegen. Es gibt eine andere UITableViewDatasource-Methode mit dem Namen tableView: heightForRowAtIndexPath: die Sie implementieren sollten, um die Höhe der Zelle zurückzugeben. Sei vorsichtig dabei, aber Sie dürfen die Zelle in diesem Indexpfad nicht innerhalb dieser Methode abrufen. Wenn Sie dies tun, konstruieren Sie eine unendliche rekursive Schleife.

Edit: um klar zu sein; Sie müssen die Höhe der Zelle nur basierend auf ihrem Inhalt und nicht auf der Zelle selbst berechnen.

Auch in Ihrem Code, in dem Sie die Zelle erstellen, können Sie einfach CGRectZero an das Frame-Argument übergeben; Die Tabellenansicht berechnet den Rahmen der Zelle selbst, wenn Sie dies tun (und die explizite Übergabe des Rahmens ist in OS 3.0 veraltet, wenn ich mich richtig erinnere).

+0

"du musst die höhe der zelle nur basierend auf ihrem inhalt berechnen" Ich kenne den Inhalt meiner Zelle. Es sind einige Beschriftungen, die in "TableView cellForRowAtIndexPath" festgelegt sind. Wie ändere ich die Größe der Tabellenzelle? –

3

Wenn alle Zeilen die gleiche Höhe haben, was ich in Ihrem Fall für richtig halte, können SieRowHeight in Ihrem Tabellenansicht-Controller festlegen.

- (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; 
} 

Die Zeilenbreite kann durch die Tabellensuper Breite

Verwandte Themen