sto sovraccaricare il metodo delegato -tableView:heightForRowAtIndexPath:
e utilizzando -sizeWithFont:constrainedToSize:
per impostare a livello di codice l'altezza della cella, in base al testo in quella cella:Ripristino personalizzato UITableViewCell altezza quando iPhone è ruotato
- (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;
}
questo funziona quando il tavolo è prima disegnato. Tuttavia, quando cambio l'orientamento del dispositivo, da verticale a orizzontale, l'altezza della cella non cambia.
ho provato l'override del metodo -shouldAutorotateToInterfaceOrientation:
nel mio controller vista tabella:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
return YES;
}
Questo dovrebbe ricaricare i dati della tabella e (presumibilmente) ridisegnare il panorama delle celle della tabella. Ma questo non ha alcun effetto.
C'è un modo per forzare una cella a ridisegnare con una nuova altezza, quando il dispositivo viene ruotato?
EDIT: Ho provato quanto segue, a nessun effetto:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Ecco ciò che l'applicazione si presenta come orientamento verticale:
Ecco ciò che l'applicazione assomiglia all'orientamento orizzontale:
C'è uno spazio tra i bordi superiore e inferiore del contenuto.
EDIT 2:
Regolazione il parametro di dimensione tramite la larghezza del telaio del tavolo aiutato risolvere il problema di visualizzazione:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];
ho provato -reloadData. –
Ho provato -reloadSections: withRowAnimation: nel -shouldAutorotateToInterfaceOrientation: metodo e anche questo non funziona. –
Questi funzionano tutti se chiamati dopo che la vista è stata ridimensionata. Ciò significa che dovrebbero essere nel tuo fattoRotateFromInterfaceOrientation: – rpetrich