2010-10-04 5 views
3

Je voudrais faire une hauteur UITableViewCell personnalisée en utilisant (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath.Calculer la hauteur de la cellule en fonction du nombre de lignes?

J'essaye d'obtenir la taille du UITableViewCell en multipliant le nombre de lignes dans textLabel par la taille de chaque ligne et en ajoutant 10.0f pour le sous-titre. J'utilise le code suivant et obtenir exc_bad_access(). Pourquoi?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    return ([[[tableView cellForRowAtIndexPath:indexPath] textLabel] numberOfLines] * [[[[tableView cellForRowAtIndexPath:indexPath] textLabel] font] lineHeight]) + 10.0; 
    //return kRowHeightiPod; //A constant value for a sanity check 
} 
+0

jetez un oeil à cette question. si vous regardez la deuxième partie de la réponse, je crois que vous trouverez la solution http://stackoverflow.com/questions/129502/how-do-i-wrap-text-in-a-capable-avec- a-custom-cell –

+0

@Aaron - Je crois que cela devrait être plus simple. Je ne devrais pas avoir à redéfinir un rect pour ma cellule. Je devrais être capable de calculer simplement la hauteur en fonction du nombre de lignes. J'essaie d'obtenir des valeurs flottantes pour ma hauteur de ligne et le nombre de valeurs de ligne. – Moshe

+0

Je pense qu'à la fin, cette solution se révélera être la plus facile, vous n'avez pas encore de cellule rect. –

Répondre

4

Avant de pouvoir obtenir la cellule, vous devez calculer sa hauteur. Vous venez de faire calculer sa hauteur en fonction de l'obtention de la cellule. Vous avez créé une récursion infinie.

Vous allez devoir trouver un autre moyen de faire votre calcul, probablement en examinant les données que vous ajoutez à la cellule du tableau, plutôt que d'interroger directement la cellule du tableau.

Notez également que numberOfLines représente le nombre de lignes pouvant être affichées par une étiquette de texte, mais qu'elle peut afficher moins si le contenu est insuffisant. En d'autres termes, même s'il affiche uniquement une ligne de texte, numberOfLines renvoie deux si c'est le nombre maximum de lignes que l'étiquette de texte est capable d'afficher.

Ce que vous voulez probablement est d'utiliser l'un des NSString UIKit additions pour calculer la hauteur du texte de texte que vous souhaitez afficher dans la cellule.

0

Définissez-vous le nombre de lignes sur l'étiquette? Parce que cela va vous donner une réponse qui est la valeur par défaut, pas le nombre de lignes qui correspondent au texte que vous utilisez ...

Je dirais que la cause la plus probable d'un crash est quelque chose à voir avec le textLabel . Essayez de définir NSZombieEnabled sur YES dans les variables d'environnement de l'exécutable, et le journal vous dira quel type d'objet est appelé après sa sortie ...

Questions connexes