Question

Je voudrais faire une hauteur UITableViewCell personnalisée à l'aide (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath.

Je suis en train d'obtenir la hauteur du UITableViewCell en multipliant le nombre de lignes en textLabel par la hauteur de chaque ligne, puis en ajoutant 10.0f pour le sous-titre. Je suis en utilisant 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
}
Était-ce utile?

La solution

Avant de pouvoir obtenir la cellule, vous devez calculer la hauteur de lui. Vous venez de faire calculer la hauteur de dépendante sur l'obtention de la cellule. Vous avez créé une récursion infinie.

Vous allez avoir besoin de trouver une autre façon de faire votre calcul, probablement en examinant les données que vous ajoutez à la cellule de table, plutôt que d'interroger la cellule du tableau directement.

En outre, notez que numberOfLines représente le nombre de lignes d'une étiquette de texte est capable d'afficher, mais il peut afficher moins s'il est contenu ne suffit pas. En d'autres termes, même si elle est seulement l'affichage d'une ligne de texte, numberOfLines retournera deux si c'est le nombre maximum de lignes de texte l'étiquette est capable d'afficher.

Qu'est-ce que vous voulez sans doute est d'utiliser l'un des ajouts NSString UIKit pour calculer la hauteur du texte de texte que vous voulez afficher dans la cellule.

Autres conseils

Avez-vous défini nombre de lignes sur l'étiquette? Parce que ça va vous donner une réponse qui est la valeur par défaut, et non pas le nombre de lignes qui correspondent au texte que vous utilisez ...

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top