Problèmes liés au redimensionnement dynamic des hauteurs de ligne et d'label (iOS)

Le context:

  • Construire une application qui remplit une table qui prend en charge datatables d'un vidage jy d'asyc.
  • Les cellules sont d'une class personnalisée (I définie). L'label principale dans la cellule peut être très longue.
  • Il est "placé" dans le storyboard au sein d'une cellule prototype mais personnalisé par code (trucs plutôt standard).
  • Les labels sont redimensionnées dans cellForRowAtIndexPath et les lignes sont redimensionnées via heightForRowAtIndexPath – les lignes sont redimensionnées en forçant un appel à cellForRowAtIndex comme la réponse de Massimo ici

Donc, par la question à scope de main – j'ai remarqué quelques choses intéressantes (mauvaises) qui se produisent.

Premier problème: Lors du chargement de la table, les lignes et les labels sont dynamicment redimensionnées correctement! Génial! Cependant, lorsque je défile vers le bas et que je défile vers le haut, les hauteurs d'label sont incorrectes (par exemple) la première rangée était correcte au chargement. Ensuite, lorsque je défilerai vers le bas et remonterai pour le voir à nouveau, il sera tronqué. Plus précisément, la taille de la ligne sera correcte mais la hauteur de l'label changera et sera tronquée à 2 lignes seulement. Je me request si c'est parce que j'ai fait le storyboard et le encoding pour personnaliser la cellule. Quelqu'un a déjà vu ça?

Deuxième problème: lorsque je défile vers le bas, alors que les lignes sont correctement dimensionnées (grandes), les labels sont courtes (tronquées). Je me request si c'est un peu inverse de la «réponse potentielle» ci-dessus.

  • "réponse potentielle" est que les lignes sont toutes calculées et stockées "en avant" de sorte que le défilement vers le bas / puis vers le haut ne l'affecte pas. Cependant, lorsque les cellules sont «hors de vue» et sont retirées de la queue, lorsqu'elles sont visionnées (défiler vers le bas puis remonter), elles reposent sur le scénario.

Les trois problèmes sont symptomatiques du return de la mauvaise hauteur dans heightForRowAtIndexPath. Dans mes classs de model de données, j'ai une méthode calculateHeight que j'appelle heightForRowAtIndexPath. Le model met également en cache la réponse afin qu'il n'ait pas à la recalculer après le premier appel. La class de cellule utilise la hauteur calculée du model pour mettre en forme ses sous-vues.

"RÉPONDU" en supprimant la cellule prototype du storyboard et en les intégrant dans le code, le problème a disparu. Les fonctionnements fondamentaux ne sont toujours pas compris (c'est-à-dire les interactions entre le storyboard et le code lorsque les cellules sont placées en queue et regardées de nouveau)