Les cellules de dimensionnement automatique font sauter UITableView

J'ai un UITableView, chaque cellule a une image et deux labels, comme vous pouvez le voir sur la première image

entrez la description de l'image ici

Donc j'essaie d'utiliser des cellules auto-dimensionnantes et tout est génial, sauf 2 choses:

1) La première et la seconde cellule n'affichent pas le contenu correctement, mais après que je défile vers le bas et que je revienne vers elles, tout va bien. J'ai essayé d'utiliser [tableview reloadData] dans viewDidApper, mais cela n'aide pas. Regardez les labels au début, elles ne correspondent pas. Vous pouvez le regarder sur cette video https://www.youtube.com/watch?v=I9DGBl1c5vg

Regardez les labels sur la première cellule.

2) C'est un dur. Je défile la table et tout est génial, mais le problème se produit quand je sélectionne la ligne. Cela me pousse à la vue détaillée, mais quand j'appuie sur "return" et que je returnne à la vue principale, la vue de table saute, donc je reviens pas à la rangée sélectionnée, aussi si je défile la table ne défile pas saute. Voici les liens pour deux videos, la première montre que le défilement est lisse https://www.youtube.com/watch?v=9wAICcZwfO4 si je ne vais pas à la vue de détail, et la seconde montre le problème de saut https: / /www.youtube.com/watch?v=fRcQ3Za1wDM .

Il est absolument certain que les cellules auto-dimensionnées sont connectées, car si je ne l'utilise pas, aucun problème ne se pose. Si vous avez besoin d'une video qui montre la bonne fonctionnalité, dites-moi.

D'accord, j'ai résolu les deux problèmes.

question 1

J'ai ajouté ces deux lignes

[cell.contentView setNeedsLayout]; [cell.contentView layoutIfNeeded]; 

in - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath avant la return cell

question 2

La solution a semblé être très simple. J'ai juste besoin d'implémenter viewWillDissapear et de recharger datatables, donc le code ressemble à ceci

 - (void)viewWillDisappear:(BOOL)animated;{ [super viewWillDisappear:animated]; [self.tableView reloadData]; } 

La solution pour moi était simple, si cela ne fonctionne pas pour quelqu'un, ici j'ai trouvé quelques liens utiles.
1) Mise en page UITableView gâcher sur segue push et return. (iOS 8, Xcode beta 5, Swift)
2) http://useyourloaf.com/blog/2014/08/07/self-sizing-table-view-cells.html

Malheureusement, je crois que les deux questions que vous posez sont des bogues IOS.

Question 1)

Une solution facile est proposée par ce blog .

Lorsque la vue de la table est affichée pour la première fois, vous pouvez constater que certaines cellules ne sont pas dimensionnées correctement. Mais lorsque vous faites défiler la vue de la table, les nouvelles cellules sont affichées avec une hauteur de ligne correcte. Pour contourner ce problème, vous pouvez forcer un rechargement après l'affichage de la vue:

Ajoutez simplement ce qui suit à votre méthode viewDidAppear . Je l'ai testé et ça marche très bien.

 [self.tableView reloadData]; 

Question 2)

Cette deuxième question est un doublon de cette question suivante:

Les cellules auto-dimensionnantes UITableView IOS 8 sautent / changent visuellement lorsqu'un nouveau controller de vue est poussé

Une solution de contournement est suggérée par l'auteur de la question lui-même, ce qui semble correct. Cependant, je n'ai pas encore essayé celui-là.

Ok, je l'ai résolu en mettant en cache mes hauteurs de cellules dans sizeThatFits, et en returnnant cette valeur pour les hauteurs de cellules estimées dans le délégué. Fonctionne magnifiquement.

N'hésitez pas à vous diriger vers cette question pour d'autres solutions proposées.