iOS 8 La cellule de hauteur automatique ne corrige pas la hauteur à la première charge

J'ai une application iOS 8 où j'ai une page de résultats de search que chaque cellule est autosized en fonction de la hauteur d'une certaine label. Cependant, après le chargement de la vue, les cellules affichées ne sont pas automatiquement numérisées. Après avoir fait défiler vers le bas les cellules qui suivent sont dimensionnées correctement. Je suis en train de câbler les contraintes de layout automatique dans mon storyboard. J'ai le code suivant dans viewDidLoad.

- (void)viewDidLoad { [super viewDidLoad]; //configure tableView so that we use autolayout enabled row heights self.tableView.estimatedRowHeight = 68; self.tableView.rowHeight = UITableViewAutomaticDimension; } 

Quelqu'un d'autre a-t-il vécu cela?

Oui, j'ai rencontré le même problème lors de la création des vues et des contraintes dans le storyboard (mais pas avec les vues ajoutées au code). Iv'e a corrigé ceci en ajoutant ce code dans la class de cellule personnalisée,

 -(void)didMoveToSuperview { [self layoutIfNeeded]; } 

Cela pourrait probablement aller ailleurs, mais cette méthode semble être appelée une seule fois, alors j'ai pensé que c'était un bon endroit pour le faire.

La réponse de rdelmar n'a pas fonctionné pour moi.

Ce que j'ai fait est ajouté ce code:

 [tableView setNeedsLayout]; [tableView layoutIfNeeded]; [tableView reloadData]; 

après l' [tableView reloadData] données et l' [tableView reloadData] , qui dans mon cas se trouve dans la méthode viewDidLoad de mon View Controller.

Le code de résultat serait donc:

 NSArray *fetchedData = ... [tableView reloadData]; //Fist table reload [tableView setNeedsLayout]; [tableView layoutIfNeeded]; [tableView reloadData]; //Second table reload 

Cette réponse est tirée d'ici: http://useyourloaf.com/blog/self-sizing-table-view-cells.html#comment-1783719287

Je pense qu'au lieu de forcer tableView.reloadData() et tableView.layoutIfNeeded() dans viewDidLoad , vous pouvez simplement définir la hauteur automatique de votre tableView dans viewWillLayoutSubviews() :

Rapide:

 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() tableView.estimatedRowHeight = 300 tableView.rowHeight = UITableViewAutomaticDimension } 

J'ai rencontré le même problème et je l'ai corrigé en déplaçant des affectations vers les propriétés de text UILabels de la cellule (étant les seuls composants pouvant influencer le calcul de la hauteur dans ma cellule particulière):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

au lieu de:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

Avant de faire cela, j'ai remarqué que la hauteur de la cellule serait calculée correctement si une cellule défilait momentanément hors de l'écran puis de nouveau en vue. Très probablement parce que, à ce moment-là, la cellule avait les informations nécessaires concernant le contenu UILabel déterminant la hauteur finale.

J'ai été capable de contourner celui-ci en n'utilisant pas de plumes / story-boards mais plutôt de faire la layout par programmation.