57 votes

Comment redimensionner dynamiquement la hauteur UITableViewCell

J'ai le classique regroupés UITableView modifiables UITextViews à l'intérieur de chaque cellule. Ce texte peut être mono ou multi-alignés, et je veux la cellule à l'augmentation de sa hauteur que l'utilisateur écrit et le texte commence une nouvelle ligne.

Ma question est: ai-je besoin de recharger l'ensemble de la table, juste pour augmenter la hauteur d'une cellule? N'est-il pas une autre méthode?

J'ai été la recherche d'un lot, et de réponses et des tutoriels juste parler de la façon de calculer la hauteur de texte, comment mettre en œuvre heightForRowAtIndexPath... des choses que je connais déjà. Mon souci est que, pour réaliser ce que je veux, je dois calculer la hauteur et la recharger à la table à chaque fois que l'utilisateur entre dans un nouveau personnage, je ne trouve pas très propre ou efficace.

Merci.

85voto

Andrey Z. Points 3298
[tableView beginUpdates];
[tableView endUpdates];

62voto

rickharrison Points 2891

Vous n'avez pas toujours à recharger la table entière. Vous pouvez simplement recharger cette ligne.

 [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
 

27voto

Elfred Points 3395

Pour être plus précis, oui, vous devez implémenter tableView:heightForRowAtIndexPath: pour calculer la nouvelle hauteur, puis procédez comme indiqué par rickharrison et appelez [tableView reloadRowsAtIndexPaths:withRowAnimation] . Disons que vos cellules peuvent avoir une hauteur étendue et une hauteur normale et que vous voulez qu'elles grossissent lorsqu'elles sont tapotées. Tu peux faire:

 -(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*) indexPath 
{
    if ([expandedPaths containsObject:indexPath]) {
        return 80;
    } else {
        return 44;
    }
 }

-(void)tableView:(UITableView*) didSelectRowAtIndexPath:(NSIndexPath*) indexPath
{
    [expandedPaths addObject:indexPath];
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
 

5voto

windson Points 396

-reloadRowsAtIndexPaths:withRowAnimation n'a pas redimensionné la hauteur UITableViewCell, même après avoir modifié le cadre de la cellule. Cela ne fonctionnait que lorsque je le suivais avec un -reloadData :

 [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableView reloadData];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X