web-dev-qa-db-fra.com

UITableViewCell Separator disparaissant dans iOS7

J'ai un problème étrange avec UITableView uniquement dans iOS 7.

UITableViewCellSeparator disparaît au-dessus de la première ligne et en dessous de la dernière ligne. Parfois, après la sélection des lignes ou des actions de défilement, il apparaît.

Dans mon cas, tableView est chargé à partir du style Storyboard avec le style UITableViewStylePlain. Le problème ne réside sûrement pas dans UITableViewCellSeparatorStyle, qui n'est pas modifié par défaut UITableViewCellSeparatorStyleSingleLine.

Comme je l'ai lu à Forums Apple Dev (ici et - ici) d'autres personnes ont ce problème et certaines solutions de contournement sont trouvées, par exemple:

Workaround: disable the default selection and recreate the behaviour in a method
trigged by a tapGestureRecognizer.

Mais je suis toujours à la recherche de la raison d'un comportement étrange de ce type séparateur.

Des idées?

Mise à jour: Comme je l'ai vu dans XCode 5.1 DP et iOS 7.1 bêta, Apple a tenté de résoudre ce problème. Maintenant, séparateur est affiché selon les besoins, parfois sous la dernière ligne, après un rafraîchissement, mais pas après la création d'une table.

129
B.S.

J'ai vidé la hiérarchie de sous-vues des cellules affectées et constaté que le _UITableViewCellSeparatorView était sur masqué. Pas étonnant que ce ne soit pas montré!

J'ai écrasé layoutSubviews dans ma sous-classe UITableViewCell et maintenant les séparateurs sont affichés de manière fiable:

Objective-C:

- (void)layoutSubviews {
    [super layoutSubviews];

    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            subview.hidden = NO;
        }
    }
}

Swift:

override func layoutSubviews() {
    super.layoutSubviews()

    guard let superview = contentView.superview else {
        return
    }
    for subview in superview.subviews {
        if String(subview.dynamicType).hasSuffix("SeparatorView") {
            subview.hidden = false
        }
    }
}

Les autres solutions proposées ici ne fonctionnaient pas systématiquement pour moi ou semblaient maladroites (ajouter des vues personnalisées du pied de page 1 px).

77
Ortwin Gentz

Cela a fonctionné pour moi:

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

    // fix for separators bug in iOS 7
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
42
samvermette

J'ai également eu le problème avec le séparateur manquant et j'ai découvert que le problème ne se posait que lorsque heightForRowAtIndexPath était renvoyant un nombre décimal. Solution:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return ceil(yourHeight) // Ceiling this value fixes disappearing separators
}
12
Emelie

Avez-vous essayé d’ajouter une vue UIV de hauteur 1 dans l’en-tête et dans le pied de page du tableau avec un fond gris clair? Fondamentalement, il va se moquer des premier et dernier séparateurs.

11
airpaulg

@samvermette

J'ai résolu le problème en utilisant cette méthode de délégué. Maintenant, il ne scintille pas:

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // fix for separators bug in iOS 7
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}


-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    // fix for separators bug in iOS 7
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}
8
user3074371

Nous avons rencontré ce problème dans notre application. Lorsque l'utilisateur sélectionne une cellule, une nouvelle vue de tableau est placée dans la pile de contrôleurs de navigation. Lorsque l'utilisateur la supprime, le séparateur est manquant. Nous l'avons résolu en mettant [self.tableView deselectRowAtIndexPath:indexPath animated:NO]; dans la méthode déléguée de la table didSelectRowAtIndexPath.

7
wrightak

J'ai trouvé que la solution la plus simple est de recharger également la cellule ci-dessus après avoir rechargé une cellule:

if (indexPath.row > 0) {
    NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row - 1 inSection:indexPath.section];
    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationNone];
}
6
conmulligan

Voici une solution de contournement plus simple (bien que légèrement compliquée) si vous en avez besoin. Essayez de sélectionner et de désélectionner la cellule une fois les données rechargées et l’animation par défaut terminée.

il suffit d'ajouter:

[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
6
redmoon7777

Sur la base du commentaire de @ ortwin-gentz, cette solution fonctionne pour moi sous iOS 9.

func fixCellsSeparator() {

    // Loop through every cell in the tableview
    for cell: UITableViewCell in self.tableView.visibleCells {

        // Loop through every subview in the cell which its class is kind of SeparatorView
        for subview: UIView in (cell.contentView.superview?.subviews)!
            where NSStringFromClass(subview.classForCoder).hasSuffix("SeparatorView") {
                subview.hidden = false
        }
    }

}

(Code rapide)

J'utilise fixCellsSeparator () fonction après avoir appelé endUpdates () dans certaines méthodes de mon tableView, par exemple:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    //  Perform some stuff
    //  ...

    self.tableView.endUpdates()
    self.fixCellsSeparator()

}

J'espère que cette solution sera utile pour quelqu'un!

4
Carlos D. Álvaro

Une solution simple et propre qui fonctionne à la fois sur iOS 8 et iOS 9 (beta 1)

Voici une solution de contournement simple, propre et non intrusive. Cela implique d'appeler une méthode de catégorie qui corrigera les séparateurs.

Tout ce que vous devez faire est de descendre dans la hiérarchie de la cellule et de débloquer le séparateur. Comme ça:

for (UIView *subview in cell.contentView.superview.subviews) {
    if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
        subview.hidden = NO;
    }
}

Ce que je recommande, c'est d'ajouter ceci à une catégorie sur UITableViewCell, comme ceci:

@interface UITableViewCell (fixSeparator)
- (void)fixSeparator;
@end

@implementation UITableViewCell (fixSeparator)

- (void)fixSeparator {
    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            subview.hidden = NO;
        }
    }
}

@end

Étant donné que le séparateur peut disparaître dans une cellule différente de celle actuellement sélectionnée, c'est probablement une bonne idée d'appeler ce correctif sur toutes les cellules de la vue Tableau. Pour cela, vous pouvez ajouter une catégorie à UITableView qui se présente comme suit:

@implementation UITableView (fixSeparators)

- (void)fixSeparators {
    for (UITableViewCell *cell in self.visibleCells) {
        [cell fixSeparator];
    }
}

@end

Ceci mis en place, vous pouvez appeler -fixSeparatos sur votre table, juste après l’action qui les fait disparaître. Dans mon cas, c'était après avoir appelé [tableView beginUpdates] et [tableView endUpdates].

Comme je l'ai dit au début, j'ai testé cela à la fois sur iOS 8 et iOS 9. Je présume que cela fonctionnera même sur iOS 7 mais je n'ai pas le moyen de l'essayer là-bas. Comme vous le savez probablement, cela manipule les éléments internes de la cellule et risque de ne plus fonctionner dans une version ultérieure. Et Apple pourrait théoriquement (0,001% de chance) rejeter votre application pour cette raison, mais je ne vois pas comment ils pourraient même savoir ce que vous faites là-bas (vérifier le suffixe d'une classe peut ne pas être détecté par les analyseurs statiques comme quelque chose de mauvais, IMO).

4
Lukas Petr

Complément à la réponse de airpaulg.

Donc, en gros, il faut implémenter deux méthodes UITableDelegate. Voici ma solution qui fonctionne à la fois sur iOS7 et iOS6.

#define IS_OS_VERSION_7 (NSFoundationVersionNumber_iOS_6_1 < floor(NSFoundationVersionNumber))

#define UIColorFromRGB(hexRGBValue) [UIColor colorWithRed:((float)((hexRGBValue & 0xFF0000) >> 16))/255.0 green:((float)((hexRGBValue & 0xFF00) >> 8))/255.0 blue:((float)(hexRGBValue & 0xFF))/255.0 alpha:1.0]

// Ceci cachera la grille de table vide sous les cellules si elles ne couvrent pas tout l'écran

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *view = nil;

    if (IS_OS_VERSION_7 /* && <is this the last section of the data source> */)
    {
        CGFloat height = 1 / [UIScreen mainScreen].scale;
        view = [[UIView alloc] initWithFrame:CGRectMake(0., 0., 320., height)];
        view.backgroundColor = UIColorFromRGB(0xC8C7CC);
        view.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    }
    else
    {
        view = [UIView new];
    }
    return view;
}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (IS_OS_VERSION_7 /* && <is this the last section of the data source> */)
    {
        return 1 / [UIScreen mainScreen].scale;
    }
    else
    {
        // This will hide the empty table grid below the cells if they do not cover the entire screen
        return 0.01f;
    }
}
2
ivohad

J'ai essayé beaucoup de suggestions pour résoudre ce problème, mais je ne peux pas le résoudre.Enfin, j'ai décidé de personnaliser la ligne de séparation comme ci-dessous:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    var lineView = UIView(frame: CGRectMake(20, cell.contentView.frame.size.height - 1.0, cell.contentView.frame.size.width - 20, 1))

    lineView.backgroundColor = UIColor(red: 170.0/255.0, green: 170.0/255.0, blue: 170.0/255.0, alpha: 1)
    cell.contentView.addSubview(lineView)
}

P/S: coutume à willDisplayCell PAS cellForRowAtIndexPath

2
lee

On dirait que cette question se manifeste dans tellement de circonstances.

Pour moi, cela avait quelque chose à voir avec la sélection des cellules. Je ne sais pas pourquoi et je n'ai pas eu le temps de creuser la question trop profondément, mais je peux dire que cela a commencé à se produire lorsque je règle la selectionStyle de la cellule à aucune. c'est à dire:

//This line brought up the issue for me
cell.selectionStyle = UITableViewCellSelectionStyleNone;

J'ai essayé d'utiliser certaines des méthodes de délégation ci-dessus pour activer et désactiver la propriété separatorStyle de tableView, mais elles ne semblaient rien faire pour régler mon problème.

La raison pour laquelle j'avais besoin de cela était que je n'avais même pas besoin de sélection de cellule.

Donc, j'ai trouvé quelque chose qui a fonctionné pour moi. Je viens de désactiver la sélection sur le UITableView:

tableView.allowsSelection = NO;

J'espère que cela aidera quelqu'un si vous n'avez pas besoin de sélectionner une cellule.

2
Arjun Mehta

Cela a résolu le problème pour moi:

Assurez-vous que clipsToBounds est défini sur OUI pour la cellule, mais NON pour contentView. Définir également cell.contentView.backgroundColor = [UIColor clearColor];

2
JimmyB

Vous devez supprimer une sélection de cellule avant d'effectuer la mise à jour de la cellule. Ensuite, vous pouvez restaurer la sélection.

NSIndexPath *selectedPath = [self.tableview indexPathForSelectedRow];
    [self.tableview deselectRowAtIndexPath:selectedPath animated:NO];
    [self.tableview reloadRowsAtIndexPaths:@[ path ] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableview selectRowAtIndexPath:selectedPath animated:NO scrollPosition:UITableViewScrollPositionNone];
1
Voloda2

Assez étonnamment, changer la valeur de separatorInset d'une cellule semble fonctionner:

NSIndexPath *selectedPath = [self.controller.tableView indexPathForSelectedRow];
[self.controller.tableView deselectRowAtIndexPath:selectedPath animated:YES];

UITableViewCell *cell = [self.controller.tableView cellForRowAtIndexPath:selectedPath];
UIEdgeInsets insets = cell.separatorInset;
cell.separatorInset = UIEdgeInsetsMake(0.0, insets.left + 1.0, 0.0, 0.0);
cell.separatorInset = insets;
1

J'ai également eu le problème de cet affichage de ligne de séparateur incohérent au bas de mon UITableView. À l'aide d'une vue de pied de page personnalisée, j'ai pu créer une ligne similaire et l'afficher au-dessus de la ligne existante potentielle (qui manquait parfois).

Le seul problème de cette solution est que Apple peut changer un jour l'épaisseur de la ligne

- (UIView*) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    float w = tableView.frame.size.width;

    UIView * footerView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, w, 1)];
    footerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    footerView.clipsToBounds=NO;

    UIView* separatoraddon = [[UIView alloc] initWithFrame:CGRectMake(0, -.5, w, .5)];
    separatoraddon.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    separatoraddon.backgroundColor = tableView.separatorColor;
    [footerView addSubview:separatoraddon];

    return footerView;
}
- (CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 1;
}
1
Paco_777

Pour résoudre le problème ci-dessus, ajoutez un pied de page vide dans viewDidLoad.

UIView *emptyView_ = [[UIView alloc] initWithFrame:CGRectZero];   
emptyView_.backgroundColor = [UIColor clearColor];  
[tableView setTableFooterView:emptyView_];

Veuillez ne pas utiliser les lignes ci-dessus dans la méthode de délégation viewForFooterInSection. Signifie que la méthode viewForFooterInSection n'est pas implémentée.

1
Suresh Durishetti

J'ai résolu de mettre ces lignes de code où la mise à jour de la tableview se produit:

self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine;

Par exemple, dans mon cas, je les ai mis ici:

tableView.beginUpdates()
tableView.insertRowsAtIndexPaths(insertIndexPaths, withRowAnimation: UITableViewRowAnimation.Fade)
tableView.endUpdates()
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine;
1
Andorath

Voici ma solution à ce problème. Après avoir inséré vos cellules, rechargez la section. Si le rechargement de la section entière est trop intensif pour vous, rechargez simplement les chemins indexPaths ci-dessus et ci-dessous.

[CATransaction begin];
[CATransaction setCompletionBlock:^{
    //  Fix for issue where seperators disappear

    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}];

[self.tableView insertRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationFade];

[CATransaction commit];
0
mattsven

j'ai rencontré un autre problème similaire. Une autre bonne solution, en particulier si votre source de données n'est pas grande, est de recharger la table de données lorsque vous implémentez la méthode -(void)scrollViewDidScroll:(UIScrollView *)scrollView. Voici un exemple:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
      if (scrollView == self.tableView1) {
          [self.tableView1 reloadData];
      }

      else {
          [self.tableView2 reloadData];
      }
}

Vous pouvez également recharger des données non visibles en fonction de la source de données visible, mais cela nécessite davantage de piratage.

Gardez à l'esprit que cette fonction de délégué relève du protocole UITableViewDelegate!

J'espère que ça aide!

0
smahmood11

Je résous ce problème d’une autre manière: ajoutez un calque dont la hauteur est 0.5px et sa couleur est gris clair dans la sous-couche tableview.tableFooterView.

le code est juste comme ça:

UIView *tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 70)];
CALayer *topSeperatorLine = [CALayer layer];
topSeperatorLine.borderWidth = 0.5f;
topSeperatorLine.borderColor = [UIColor lightGrayColor].CGColor;
topSeperatorLine.frame = CGRectMake(0, 0, 320, 0.5f);
[tableFooterView.layer addSublayer:topSeperatorLine];
self.tableView.tableFooterView = tableFooterView;
0
jianpx

Ce qui a fonctionné pour moi a été de recharger les données après beginUpdates et endUpdates:

private func animateCellHeighChangeForTableView(tableView: UITableView, withDuration duration: Double) {
     UIView.animateWithDuration(duration) { () -> Void in
        tableView.beginUpdates();
        tableView.endUpdates();
        tableView.reloadData();
     }
}
0
Ali M

Dans mon cas, j'ai essayé toutes les réponses citées mais je ne travaillais pas pour moi. J'ai utilisé deux réponses, ce qui a fonctionné pour moi. ci-dessous est la solution:

ajoutez les lignes ci-dessous dans votre UITableViewConstroller

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

       // fix for separators bug in iOS 7
    self.tableView.separatorStyle = .none;
    self.tableView.separatorStyle = .singleLine;
}

Maintenant, substituez la méthode ci-dessous dans UITableViewCell

    override func layoutSubviews() {
    super.layoutSubviews()

    guard let superview = contentView.superview else {
        return
    }
    for subview in superview.subviews {
        if String(describing: type(of: subview)).hasSuffix("SeparatorView") {
            subview.isHidden = false
        }
    }
}

J'espère que cela fonctionnera pour les autres aussi. Merci

0
Naveed Ahmad

@ Lee's Answer modifié pour obtenir le style de séparateur de vue de table par défaut et ne pas afficher séparateur pour la dernière ligne qui est impair. J'espère que ça aide quelqu'un.

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

        if indexPath.row >= yourDataSource.count - 1{
                return
        }

        let lineView = UIView(frame: CGRectMake(20, cell.contentView.frame.size.height - 1.0, cell.contentView.frame.size.width, 0.5))
        lineView.backgroundColor = tableView.separatorColor
        cell.contentView.addSubview(lineView)
    }
0
satheeshwaran

n moyen simple, propre et efficace pour le faire sans avoir à parcourir en boucle chaque sous-vue d'une cellule, appelée à chaque fois qu'une cellule est mise en file d'attente/créée, utilisez un bon KVC:

UIView *separatorView = [self valueForKey:@"separatorView"]; // pull separator using KVC

if (separatorView) {
    separatorView.hidden = NO;
}

Collez cela dans layoutSubviews de votre classe de cellules et cela devrait résoudre votre problème.

0
Stephen Paul

Passant en revue les réponses et les solutions, j'ai formulé de telles observations:

Cela semble poser problème dans iOS 7 et 8. J'ai remarqué le problème lors de la sélection d'une cellule à partir de code dans la méthode viewDidLoad:

1) La solution de contournement était en cours dans viewDidAppear: si quelqu'un ne s'inquiète pas du délai perceptible entre la présentation de la vue et la sélection de la cellule

2) la deuxième solution a fonctionné pour moi, mais le code semble un peu fragile car il repose sur la mise en œuvre interne du UITableViewCell

3) l'ajout de son propre séparateur semble être le plus flexible et le meilleur pour le moment mais nécessite plus de codage :)

0
Julian Król

Comme il s'agit toujours d'un problème avec IOS 8, j'ajouterai ma solution dans Swift. Définissez la ligne de séparation tableview sur none. Ajoutez ensuite ce code à la méthode de délégué cellForRowAtIndexPath. Il ajoutera une option Nice L'instruction if permet de décider quelles cellules doivent avoir un séparateur.

    var separator:UIView!
    if let s = cell.viewWithTag(1000)
    {
        separator = s
    }
    else
    {
        separator = UIView()
        separator.tag = 1000
        separator.setTranslatesAutoresizingMaskIntoConstraints(false)
        cell.addSubview(separator)

        // Swiper constraints
        var leadingConstraint = NSLayoutConstraint(item: separator, attribute: .Leading, relatedBy: .Equal, toItem: cell, attribute: .Leading, multiplier: 1, constant: 15)
        var heightConstraint = NSLayoutConstraint(item: separator, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 0.5)
        var bottomConstraint = NSLayoutConstraint(item: cell, attribute: .Bottom, relatedBy: .Equal, toItem: separator, attribute: .Bottom, multiplier: 1, constant:0)
        var trailingConstraint = NSLayoutConstraint(item: cell, attribute: .Trailing, relatedBy: .Equal, toItem: separator, attribute: .Trailing, multiplier: 1, constant: 15)
        cell.addConstraints([bottomConstraint, leadingConstraint, heightConstraint, trailingConstraint])
    }

    if indexPath.row == 3
    {
        separator.backgroundColor = UIColor.clearColor()
    }
    else
    {
        separator.backgroundColor = UIColor.blackColor()
    }
0
Bjørn Ruthberg

développer la réponse de airpaulg, car cela ne fonctionnait pas entièrement pour moi ..

je devais également mettre en œuvre la méthode heightforfooter pour obtenir la hauteur

alors j'ai remarqué que le lightgraycolor est trop sombre. J'ai corrigé cela en prenant la couleur de séparateur actuelle de la table et en utilisant celle-ci:

UIColor *separatorGray = [self.briefcaseTableView separatorColor]; [footerSeparator setBackgroundColor:separatorGray];

0
skinsfan00atg

Le problème du séparateur qui disparaît se produit lorsque j'insère/supprime des lignes avec une animation. Ce qui l’a résolu pour moi a été d’appeler deselectRowAtIndexPath()

var insertion = [NSIndexPath]()
var deletion = [NSIndexPath]()
// TODO: populate the insertion array and deletion array

tableView.beginUpdates()
tableView.deleteRowsAtIndexPaths(deletion, withRowAnimation: .Fade)
tableView.insertRowsAtIndexPaths(insertion, withRowAnimation: .Fade)
if let indexPath = tableView.indexPathForSelectedRow {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
tableView.endUpdates()
0
neoneye

J'ai aussi rencontré ce problème dans notre projet. Ma vue de table avait un tableFooterView qui pourrait y arriver. J'ai trouvé le séparateur au-dessous de la dernière ligne qui apparaîtrait si je supprimais cette tableFooterView.

0
xT_Tx

Comme quelqu'un d'autre l'a mentionné, ce problème semble se manifester de différentes manières. J'ai résolu mon problème via la solution de contournement suivante:

[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
0
chinabuffet

Ce qui a fait la différence pour moi a été de recharger la ligne pour laquelle la ligne de séparation inférieure n'apparaîtrait pas:

NSIndexPath *indexPath = 
     [NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex];  
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
0
Don Miguel

Dans votre sous-classe UITableViewCell, implémentez layoutSubviews et ajoutez:

- (void)layoutSubviews{
    [super layoutSubviews]
    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            CGRect separatorFrame = subview.frame;
            separatorFrame.size.width = self.frame.size.width;
            subview.frame = separatorFrame;
        }
    }
}
0
Giorgos Ath

Définir le style dans viewWillAppear a fonctionné pour moi.

0
villy393