2009-05-16 12 views
5

ich die Delegatmethode -tableView:heightForRowAtIndexPath: bin Überlastung und -sizeWithFont:constrainedToSize: mit programmatisch der Höhe der Zelle auf, basierend auf dem Text in der Zelle:Zurücksetzen benutzerdefinierte UITableViewCell Höhe, wenn das iPhone gedreht wird

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    switch (indexPath.section) { 
    case(kAboutViewOverviewSection): { 
     switch (indexPath.row) { 
     case(kAboutViewOverviewSectionRow): { 
      NSString *text = NSLocalizedString(@"kAboutViewOverviewSectionFieldText", @""); 
      CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 500)]; 
      return s.height + 13; 
     } 
     default: { 
      break; 
     } 
     } 
     break; 
    } 
    default: { 
     break; 
    } 
    } 
    return 44.0; 
} 

Dies funktioniert, wenn die Tabelle wird zuerst gezeichnet. Wenn ich jedoch die Ausrichtung des Geräts von Hochformat auf Querformat ändere, ändert sich die Zellenhöhe nicht.

Ich versuchte, die -shouldAutorotateToInterfaceOrientation: Methode in meiner Tabelle View-Controller überschreiben:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    [self.tableView reloadData]; 
    return YES; 
} 

Diese die Tabellendaten und (vermutlich) nachladen sollten die Tabellenzelle Ansichten neu zeichnen. Aber das hat keine Wirkung.

Gibt es eine Möglichkeit, eine Zelle zum Neuzeichnen mit einer neuen Höhe zu zwingen, wenn das Gerät gedreht wird?

EDIT: Ich habe folgendes versucht, ohne Wirkung:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    [self.tableView reloadData]; 
} 

Hier ist, was die Anwendung wie Orientierung im Hochformat aussieht:

Portait

ist hier, was die Anwendung sieht aus wie in Querformat:

Landscape

Es besteht eine Lücke zwischen den oberen und unteren Kanten des Inhalts.

EDIT 2:

Einstellen der Größenparameter über die Breite des Tabellenrahmen dazu beigetragen, diese Anzeige Problem zu beheben:

CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)]; 

Antwort

6

Es ist weniger als optimal, aber die einfachste Lösung ist -reloadData auf die anrufen Tabelle.

Eine bessere Lösung wäre -beginUpdates zu nennen, -deleteRowsAtIndexPaths:withRowAnimation:, -insertRowsAtIndexPaths:withRowAnimation: und -endUpdates oder einfach -reloadSections:withRowAnimation: wenn 3.0 nur Targeting. Dies wird eine Animation hinzufügen.

Edit: Und Sie müssen auch eine richtige tableView:heightForRowAtIndexPath:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CGSize textSize = [[self textForRowAtIndexPath:indexPath] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width - 20, 500)]; 
    return textSize.height + 13.0f; 
} 

(wo textForRowAtIndexPath: eine Methode, die den Text der Zelle zurückgibt)

+0

Ich versuchte -reloadData. –

+0

Ich habe versucht -reloadSections: withRowAnimation: in der -shouldAutorotateToInterfaceOrientation: -Methode und das funktioniert auch nicht. –

+0

Alle funktionieren, wenn sie nach der Größenänderung der Ansicht aufgerufen werden. Das bedeutet, dass sie sich in Ihrer didRotateFromInterfaceOrientation befinden sollten: – rpetrich

Verwandte Themen