Je suis SURCHARGE la méthode déléguée -tableView:heightForRowAtIndexPath:
et en utilisant -sizeWithFont:constrainedToSize:
définir par programmation la hauteur de la cellule, en fonction du texte dans cette cellule:Remise à zéro sur mesure UITableViewCell la hauteur lorsque l'iPhone est tourné
- (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;
}
Cela fonctionne lorsque la table est d'abord dessiné. Cependant, lorsque je change l'orientation de l'appareil, de portrait en paysage, la hauteur de la cellule ne change pas.
J'ai essayé redéfinissant la méthode -shouldAutorotateToInterfaceOrientation:
selon moi la table contrôleur:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
return YES;
}
Cela devrait recharger les données de la table et (probablement) redessiner les vues de cellules de table. Mais cela n'a aucun effet.
Existe-t-il un moyen de forcer une cellule à redessiner avec une nouvelle hauteur, lorsque l'appareil est pivoté?
EDIT: J'ai essayé ce qui suit, sans effet:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Voici ce que l'application ressemble en orientation portrait:
Voici ce que l'application ressemble à l'orientation paysage:
Il existe un espace entre les bords supérieur et inférieur du contenu.
EDIT 2:
Réglage du paramètre de taille par la largeur du cadre de la table a contribué à résoudre ce problème d'affichage:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];
J'ai essayé -reloadData. –
J'ai essayé -reloadSections: withRowAnimation: dans la méthode -shouldAutorotateToInterfaceOrientation: et cela ne fonctionne pas non plus. –
Tout cela fonctionne s'il est appelé après que la vue a été redimensionnée. Cela signifie qu'ils devraient être dans votre didRotateFromInterfaceOrientation: – rpetrich