5 votes

Les lignes de séparation de UITableView disparaissent entre les cellules lors du défilement.

Problème : Le séparateur entre les cellules d'une vue en tableau n'apparaît que pour les cellules affichées lors du chargement de la vue, et uniquement au moment du chargement. Lorsque le tableau est déroulé vers le bas, les cellules défilant dans la vue ne présentent pas de séparateur entre elles, puis lorsque le tableau est remonté, les cellules initiales ne présentent pas de séparateur.

Détails : J'ai un UITableView auquel j'ajoute des UITableViewCells standard. Ces cellules sont créées avec initWithFrame, frame height = 90px. J'ajoute une vue personnalisée créée à partir d'une nib à la vue de cette cellule, hauteur = 90px. La hauteur de la cellule est spécifiée à 90px dans tableView:heightForRowAtIndexPath :.

Quelqu'un a-t-il fait l'expérience de ce comportement ?

7voto

jtrim Points 2403

J'avais le sentiment que la solution serait simple... J'ai mis la hauteur de mes cellules à 91px et les lignes de séparation apparaissent comme elles le devraient lors du défilement.

3voto

Marc Provost Points 21

Je n'ai pas pu utiliser la solution de Douglas, car mes tableaux comportent un nombre considérable de cellules et deviendraient pratiquement inutilisables sur les téléphones plus anciens. La réutilisation des cellules est essentielle pour les performances.

MAIS, j'ai réussi à contourner le problème en utilisant un séparateur transparent et en ajoutant le mien dans la ContentView de la cellule, comme suit :

yourTable.separatorColor = [UIColor clearColor];
separatorView.frame = FactRectMake(0, rowHeight-1, appFrame.size.width, 0.2);

3voto

Tim Points 55

J'ai eu le même problème, mais j'ai utilisé une solution différente. Mes séparateurs disparaissaient parce que j'effaçais ma cellule en utilisant :

for (UIView *eachView in self.subviews) {
    [eachView removeFromSuperview];
}

Cela a également supprimé la vue du séparateur !

Au lieu de cela, j'ai attribué une étiquette à chacune de mes vues douanières (trois étiquettes) juste avant de les ajouter à la vue secondaire :

tempFirstNameLabel.tag = 100;
self.firstNameLabel = tempFirstNameLabel;
[self addSubview:self.firstNameLabel];

Ensuite, quand j'ai effacé la cellule, j'ai juste supprimé ces vues :

for (int i = 100; i<103; i++) {
    UIView *eachView = [self viewWithTag:i];
    [eachView removeFromSuperview];
}

J'espère que cela vous aidera ! Cette solution évite également les problèmes de gestion de la mémoire que posait la solution de @Douglas Smith.

1voto

Mihriban Minaz Points 345

Vous devez définir le séparateur none et ensuite single line à nouveau.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // it is a bug in iOS 7
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X