Les séparateurs UITableView sont-ils mal dessinés lors de la réutilisation de la cellule?

Je travaille sur un projet iOS 5 avec des storyboards, et utilise ainsi des prototypes de cellules de table dynamics dans IB. Dans l'une des vues, j'ai une vue de table avec des cellules à hauteur variable, avec la hauteur de la cellule calculée à partir de la hauteur du contenu.

tableView:heightForRowAtIndexPath: renvoie les valeurs correctes pour toutes les cellules lorsque la vue de table est affichée pour la première fois. Tout va bien lorsqu'on fait défiler quelques objects, mais quelque chose ne va pas: les cellules semblent avoir la bonne hauteur, y compris leurs zones de contact, mais leurs séparateurs sont rendus au mauvais endroit (à l'intérieur des cellules plutôt qu'entre eux).

De la mesure du placement du séparateur, il semble que la réutilisation des cellules pourrait avoir quelque chose à voir avec cela. Les séparateurs pour les trois premières cellules sont rendus correctement, mais pas le quasortingème. heightForRowAtIndexPath: renvoie la hauteur correcte pour elle (125 pixels dans ce cas), et ses sous-vues sont toutes à leur place. Cependant, le séparateur est rendu à seulement 108 pixels du séparateur précédent, le plaçant à l'intérieur de la zone de 125 pixels de hauteur de la cellule.

Voici le kicker: 108px est la hauteur de la première cellule de table, maintenant hors de vue et probablement réutilisée. Je n'ai pas de preuve définitive de cela, mais il semble que la vue de la table ignore ignorer heightForRowAtIndexPath: pour ces cellules et rend juste le séparateur en fonction de la hauteur de cellule réutilisée.

Cela n'explique pas pourquoi un tas de cellules plus récentes et plus courtes ne sont pas du tout des séparateurs. Mais c'est tout ce que je dois faire.

Existe-t-il une solution de contournement, un paramètre IB ou autre chose pouvant vous aider?

J'ai eu le même problème où les séparateurs montraient à des positions apparemment randoms.

Il s'est avéré que le problème était que je surchargeais layoutSubviews mais j'ai oublié d'appeler [super layoutSubviews] . L'ajout de cet appel a résolu le problème pour moi.

J'ai également rencontré ce problème étrange. Pour une cellule de tableau personnalisée, append une couche en tant que séparateur peut être un meilleur choix.

dans la méthode initWith *** de la class de cellule de table personnalisée:

 separator = [CALayer layer]; separator.backgroundColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor; [self.layer addSublayer:separator]; 

mettre à jour le cadre du séparateur dans la méthode layoutSubviews:

 - (void)layoutSubviews { CGFloat height = 1.0f; separator.frame = CGRectMake(0.0f, self.frame.size.height - height, self.frame.size.width, height); [super layoutSubviews]; }