UITableViewCell Separator scompare in iOS7


129

Ho qualche strano problema con UITableViewsolo in iOS 7.

UITableViewCellSeparatorscompare sopra la prima riga e sotto l'ultima riga. A volte dopo aver selezionato le righe o alcune azioni di scorrimento appare.

Nel mio caso tableViewviene caricato dallo stile Storyboardwith UITableViewStylePlain. Il problema sicuramente non è presente UITableViewCellSeparatorStyle, che non è stato modificato per impostazione predefinita UITableViewCellSeparatorStyleSingleLine.

Mentre leggo negli Apple Dev Forum ( qui e qui ), altre persone hanno questo problema e si trovano alcune soluzioni alternative, ad esempio:

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

Ma sto ancora cercando la ragione di un tale strano comportamento di separazione.

Qualche idea?

Aggiornamento: come ho visto in XCode 5.1 DP e iOS 7.1 beta, Apple ha provato a risolvere questo problema. Ora il separatore viene mostrato come necessario a volte sotto l'ultima riga, dopo un po 'di aggiornamento, ma non dopo la creazione di tableview.


19
A volte mi sembra che iOS7 sia così immaturo. Questo e il lungo elenco di cose che ho qui mostrano quanto sia lontano iOS7 dalla perfezione dei precedenti iOS.
Bms270,

1
L'app Impostazioni di Apple ha lo stesso problema, quindi credo che si tratti di un problema con iOS 7. L'ho segnalato e nel loro seguito hanno chiesto immagini che mostrassero il problema.
Johan,

@Gatada Dove si trova il problema nell'app Impostazioni?
Jamie Forrest,

2
Si è verificato lo stesso problema e risolto aggiungendo [cell setSeparatorInset: UIEdgeInsetsFromString (@ "1")]; con in (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) metodo indexPath
Ayesha Fatima

1
Questo sembra ancora essere rotto nelle versioni beta di iOS 8.0. Ho aperto il radar 17724043 se qualcuno si preoccupasse di ingannarlo.
Andy Wilkinson,

Risposte:


77

Ho scaricato la gerarchia di sottoview delle celle interessate e ho scoperto che _UITableViewCellSeparatorViewera impostato su nascosto. Non c'è da stupirsi che non sia mostrato!

Escludo layoutSubviewsnella mia UITableViewCellsottoclasse e ora i separatori vengono visualizzati in modo affidabile:

Obiettivo-C :

- (void)layoutSubviews {
    [super layoutSubviews];

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

Veloce :

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
        }
    }
}

Le altre soluzioni proposte qui non hanno funzionato in modo coerente per me o sembrano ingombranti (aggiungendo visualizzazioni piè di pagina personalizzate da 1 px).


Ho usato il tuo metodo ma non nella sottoclasse avevo aggiunto una categoria a UITableViewCell. Mi ha aiutato Grazie.
Vitalii Boiarskyi,

Naturalmente è anche possibile in una categoria. Dato che questo richiede un metodo che sfrigola, ho optato per il semplice approccio alla sottoclasse.
Ortwin Gentz,

3
Questa è l'unica soluzione che ha funzionato per me. Il mio problema è emerso quando UITableView aveva abbastanza righe per essere scorrevole. Quella parte "hasSuffix:" è piuttosto fragile.
juhan_h,

Per me va bene. Forse la domanda è sciocca, ma non è questo l'utilizzo dell'API privata?
Foriger,

1
Funziona per me in iOS9
tounaobun l'

42

Questo ha funzionato per me:

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

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

Ti meriti più voti positivi, questo è esattamente ciò di cui avevo bisogno, l'ho aggiunto in una categoria, quindi ora dopo aver fatto [tableView reloadData], se si verifica questo errore (nel mio caso il separatore di piè di pagina nascosto che sta riapparendo sta riapparendo), chiamo [tableView reloadSeparators];
NiñoScript

12

Ho anche avuto il problema con il separatore mancante e ho scoperto che il problema si verificava solo quando heightForRowAtIndexPathveniva restituito un numero decimale . Soluzione:

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

1
Che dire del caso se non implemento nemmeno il metodo heightForRowAtIndexPath?
BS

Interessante. Tuttavia, succede anche nel mio progetto - e heightForRowAtIndexPath non è implementato. Nella riga IB / altezza della cella è 100.
Johan

6
Non ha risolto il problema per me e ho il metodo heightForRowAtIndexPath.
Gergely Kovacs,

Risolve il problema almeno parzialmente. La cella sembra essere confusa su altezze non intere.
Nick Frolov,

Devi selezionare il numero di pixel e quindi dividere per il fattore di scala dello schermo per ottenere punti che vanno bene in decimali. Se non lo fai, non sarà ottimizzato per la retina.
trss,

11

Hai provato ad aggiungere una vista UIV di altezza 1 nell'intestazione e nel piè di pagina del tavolo con il colore di sfondo grigio chiaro? Fondamentalmente deriderà il primo e l'ultimo separatore.


suona bene, ma come si fa esattamente? usare viewforfooter?
skinsfan00atg,

1
non è così facile come sembra, per qualche motivo ho dovuto implementare anche heightforfooter, altrimenti l'altezza specificata nell'initwithframe è stata ignorata. noto anche che il lightgraycolor non è dello stesso colore, quindi non funzionerà davvero. potrebbe essere necessario creare un grigio personalizzato
skinsfan00atg

questo è abbastanza janky IMO
Jacky Johnson

Sì, sono pienamente d'accordo. È l'unica soluzione che ho trovato subito dopo il rilascio di iOS 7, c'è un approccio migliore ora?
airpaulg,

2
Per abbinare il colore, utilizzare tableView.separatorColor
Jeff

8

@samvermette

Ho risolto il problema utilizzando questi metodi delegati. Ora non lampeggia:

-(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;
}

7

Abbiamo riscontrato questo problema nella nostra app. Quando l'utente ha selezionato una cella, una nuova vista tabella è stata inserita nello stack del controller di navigazione e quindi quando l'utente l'ha estratta, mancava il separatore. Lo abbiamo risolto inserendo [self.tableView deselectRowAtIndexPath:indexPath animated:NO];il didSelectRowAtIndexPathmetodo delegato nella vista tabella.


Ci hai provato self.tableView.allowsMultipleSelection = NO;?
Wrightak,

6

Ecco una soluzione più semplice (anche se un po 'disordinata) se ne hai bisogno, prova a selezionare e deselezionare la cella dopo che i dati sono stati ricaricati e l'animazione predefinita è stata eseguita.

basta aggiungere:

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

1
Questa soluzione alternativa l'ha risolto per me; tuttavia, l'ho invertito per mantenere la selezione. Quindi, prima deseleziona, quindi riseleziona.
Johan,

2
Non so cosa ignorare quando dici "dopo che i dati sono stati ricaricati"
airpaulg,

6

Ho scoperto che la soluzione più semplice è, dopo aver ricaricato una cella, ricaricare anche la cella sopra:

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

1
Ha funzionato per me. Grazie. Qualsiasi altro metodo non mi ha aiutato (includi il cambiamento di stile del separatore dalla risposta di samvermette).
surfrider,

4

Una soluzione semplice e pulita che funziona su iOS 8 e iOS 9 (beta 1)

Ecco una soluzione semplice, pulita e non invadente. Implica la chiamata di un metodo di categoria che riparerà i separatori.

Tutto quello che devi fare è percorrere la gerarchia della cella e scoprire il separatore. Come questo:

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

Quello che consiglio è di aggiungere questo a una categoria su UITableViewCell, in questo modo:

@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

Poiché il separatore può scomparire in una cella diversa da quella attualmente selezionata, è probabilmente una buona idea chiamare questa correzione su tutte le celle nella vista tabella. Per questo, puoi aggiungere una categoria a UITableView che va in questo modo:

@implementation UITableView (fixSeparators)

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

@end

Con questo in atto, puoi chiamare -fixSeparatossul tuo tableView subito dopo l'azione che li fa scomparire. Nel mio caso, è stato dopo aver chiamato [tableView beginUpdates]e [tableView endUpdates].

Come ho affermato all'inizio, l'ho provato sia su iOS 8 che su iOS 9. Presumo che funzionerà anche su iOS 7 ma non ho modo di provarlo lì. Come probabilmente saprai, questo è un problema con gli interni della cella, quindi potrebbe smettere di funzionare in una versione futura. E Apple potrebbe teoricamente (0,001% di probabilità) rifiutare la tua app per questo motivo, ma non riesco a vedere come potrebbero persino scoprire cosa stai facendo lì (il controllo del suffisso di una classe non può essere rilevato dagli analizzatori statici come qualcosa cattivo, IMO).


SÌ. Questo ha funzionato per me, dopo la conversione all'ultima versione di Swift. ++ per chiamare fixSeparators dopo ogni chiamata a tableView.endUpdates ().
ObjectiveTC

1
Sono contento che questo ti sia stato utile! Credo davvero che questa sia la soluzione migliore, quindi spero che più persone lo scoprano.
Lukas Petr,

4

Basato sul commento di @ ortwin-gentz, questa soluzione funziona per me in 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
        }
    }

}

(Codice SWIFT)

Uso la funzione fixCellsSeparator () dopo aver chiamato endUpdates () in alcuni metodi di tableView, ad esempio:

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

    //  Perform some stuff
    //  ...

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

}

Spero che questa soluzione sia utile per qualcuno!


2

Complemento alla risposta di airpaulg.

Quindi sostanzialmente si devono implementare due metodi UITableDelegate. Ecco la mia soluzione che funziona su iOS7 e 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]

// Questo nasconderà la griglia della tabella vuota sotto le celle se non coprono l'intero schermo

- (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

Ciò ha risolto il problema per me:

Assicurarsi che clipsToBoundssia impostato su SÌ per la cella, ma NO per la cella contentView. Anche impostatocell.contentView.backgroundColor = [UIColor clearColor];


L'impostazione di clipSubviews su false nello storyboard sia per la cella sia per contentView ha risolto il problema! Ha bisogno di più voti!
Brett,

L'impostazione di clipsToBounds su YES sulle celle è stata sufficiente per me.
Rene Juuse,

2

Sembra che questo problema si manifesti in così tante circostanze.

Per me aveva qualcosa a che fare con la selezione delle cellule. Non ho idea del perché e non ho avuto il tempo di scavare troppo in profondità, ma posso dire che ha iniziato a verificarsi quando ho impostato la cella selectionStylesu nessuno. vale a dire:

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

Ho provato a utilizzare alcuni dei metodi delegati sopra che attivano e disattivano la separatorStyle proprietà di tableViewma non sembrano fare nulla per risolvere il mio problema.

L'intero motivo per cui ne avevo bisogno era perché non avevo nemmeno bisogno della selezione delle celle.

Quindi, ho trovato qualcosa che ha funzionato per me. Ho appena disabilitato la selezione su UITableView:

tableView.allowsSelection = NO;

Spero che questo aiuti qualcuno, se non hai bisogno di avere una selezione di celle.


2

Ho provato tanti suggerimenti da risolvere, ma non posso risolverlo. Finalmente ho deciso di personalizzare la linea di separazione come di seguito:

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: personalizzato su willDisplayCell NON cellForRowAtIndexPath


1

Abbastanza sorprendentemente, cambiare il separatorInsetvalore della cella avanti e indietro sembra funzionare:

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

Ho anche avuto il problema di questa incoerente visualizzazione della linea di separazione nella parte inferiore di UITableView. Usando una vista piè di pagina personalizzata, sono stato in grado di creare una linea simile e visualizzarla in cima a una potenziale esistente (che a volte mancava).

L'unico problema di questa soluzione è che Apple potrebbe cambiare un giorno lo spessore della linea

- (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

Ho risolto inserendo queste righe di codice in cui è in corso l'aggiornamento di tableview:

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

Ad esempio, nel mio caso li ho messi qui:

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

1

È necessario rimuovere una selezione di celle prima di eseguire l'aggiornamento della cella. Quindi è possibile ripristinare la selezione.

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

Per risolvere il problema precedente, aggiungi il piè di pagina vuoto in viewDidLoad.

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

Non utilizzare le righe precedenti nel metodo delegato viewForFooterInSection. Significa non implementare il metodo viewForFooterInSection.


0

per espandere la risposta di airpaulg, perché non ha funzionato del tutto per me ..

ho dovuto implementare anche il metodo heightforfooter per ottenere l'altezza

poi ho notato che il grigio chiaro è troppo scuro. ho risolto questo problema afferrando l'attuale colore del separatore della vista tabella e usando quello:

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


0

Ho anche riscontrato questo problema nel nostro progetto. La mia vista tabella aveva un tableFooterView che poteva farlo accadere. Ho trovato il separatore sotto l'ultima riga apparirebbe se avessi rimosso TableFooterView.


0

Ciò che ha fatto la differenza per me è stato ricaricare la riga per la quale la linea di separazione inferiore non appariva:

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

0

Risolvo questo problema in un altro modo: aggiungo un livello che ha un'altezza di 0,5 px e il suo colore è chiaro in tableview.tableFooterView come suo sublayer.

il codice è proprio così:

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

Nella sottoclasse UITableViewCell implementare layoutSubviews e aggiungere:

- (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

Come qualcun altro ha menzionato, questo problema sembra manifestarsi in vari modi. Ho risolto il mio problema con la seguente soluzione alternativa:

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

0

Esaminando le risposte e le soluzioni, ho trovato tali osservazioni:

Questo sembra essere problematico in iOS 7 e 8. Ho notato il problema quando si seleziona la cella dal codice in viewDidLoad metodo così:

1) la soluzione era farlo viewDidAppear:se a qualcuno non importa il notevole ritardo tra la presentazione della vista e la selezione della cella

2) la seconda soluzione ha funzionato per me, ma il codice sembra un po 'fragile in quanto si basa sull'implementazione interna diUITableViewCell

3) l'aggiunta del proprio separatore sembra essere il più flessibile e il migliore per ora, ma richiede più codice :)


0

Impostare lo stile ha viewWillAppearfunzionato per me.


0

Poiché questo è ancora un problema con IOS 8, aggiungerò la mia soluzione in Swift. Impostare la linea di separazione tableview su nessuna. Quindi aggiungere questo codice al metodo delegato cellForRowAtIndexPath. Aggiungerà un bel separatore. L'istruzione if consente di decidere quali celle devono avere un separatore.

    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

Ecco la mia soluzione a questo problema. Dopo aver inserito le celle, ricaricare la sezione. Se ricaricare l'intera sezione è troppo intenso per te, basta ricaricare indexPaths sopra e sotto.

[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

si è verificato un problema simile, ho scoperto che un'altra buona soluzione, soprattutto se l'origine dati non è grande è ricaricare tableData quando si implementa il -(void)scrollViewDidScroll:(UIScrollView *)scrollViewmetodo, ecco un esempio:

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

      else {
          [self.tableView2 reloadData];
      }
}

Puoi anche ricaricare dati non visibili in base all'origine dati visibile, ma ciò richiede un po 'più di hacking.

Tieni presente che questa funzione delegato rientra in UITableViewDelegate protocollo!

Spero che sia d'aiuto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.