Dans une vue de table, j'utilise des UITableViewCells personnalisés avec une hauteur dynamique. L'algorithme de mise en page est compliqué car il n'y a pas seulement des blocs de texte dynamiques mais aussi des images de hauteur différente. Lorsque la fonction heightForRowAtIndexPath appropriée est appelée, la cellule de vue de la fente n'a pas été restituée. Dois-je calculer la hauteur deux fois? Une fois pour heightForRowAtIndexPath et onece pour cellForRowAtIndexPath? Ou y a-t-il un motif pour combiner cela?Hauteur de la table dynamique. Calcul redondant de la hauteur de la rangée?
Répondre
Vous n'avez pas besoin d'écrire le code de calcul deux fois. Vous pouvez faire tout le travail dur dans cellForRowAtIndexPath:
et ensuite utiliser le résultat pour obtenir la hauteur dans la méthode de hauteur. Par exemple, votre méthode de hauteur pourrait ressembler à ceci (en utilisant des noms courts pour l'aider à adapter):
// I usually use descriptive variable names, but they won't fit on one line here.
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)i {
UITableViewCell *cell = [self tableView:t cellForRowAtIndexPath:i];
return cell.frame.size.height;
}
La mauvaise partie de ce code est que cette méthode sera appelé pour chaque ligne de votre table avant la table est d'abord affiché (le système d'exploitation fait cela), ce qui peut apparaître comme retard dans votre application. Si vos hauteurs changent au fil du temps (par ligne), il serait bon d'avoir un moyen plus rapide de calculer la hauteur, ce qui, oui, est beaucoup plus de travail. Cependant, si vos hauteurs de rangée sont toujours les mêmes (par ligne) au fil du temps, vous pouvez simplement mettre en cache les hauteurs.
Référence avec un code de mise en cache, vous pouvez utiliser pour cela: http://bynomial.com/blog/?p=90
Cela ne fonctionnera pas parce que heightForRowAtIndexPath est appelé avant cellForRowAtIndexPath. De plus, l'appel de la méthode 'cellFor' dans la méthode 'heightFor' crée une boucle infinie. J'ai posé la même question et demander des conseils sur ma solution proposée ici: http://stackoverflow.com/questions/4823197/iphone-when-to-calculate-heightforrowatindexpath-for-a-tableview-when-each-cell – JohnRock