2013-12-08 12 views
6

Ho un UIViewController con un colore di sfondo personalizzato. Sopra di esso c'è uno UITableView con UITableViewCells semitrasparente (colore bianco con opacità 0,5).Trasparente UITableViewCell sfondo lampeggiante durante l'animazione

Il problema di cui sto incolpando e quello che sto sbattendo la testa contro il muro è in iOS 7, quando si dispone di uno UITableViewCell con sfondo semitrasparente e si tenta di eliminare/inserire/spostare le righe (quindi basandosi su un effetto di animazione) l'intero UITableView con le sue celle lampeggiante per appena 0,1 secondi e imposta lo sfondo delle celle su uno più trasparente. Questo è molto fastidioso.

L'unica cosa che sto facendo è impostare il colore di sfondo del self.view con:

self.view.backgroundColor = [UIColor colorWithRed:0.4 green:0.5 blue:0.7 alpha:1]; 

e impostare il colore di sfondo delle celle con:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; 
} 

Ecco un gif che vi mostra il problema :

enter image description here

E lui è il progetto super-semplice: https://github.com/socksz/TransparentCellFlashing

Per favore aiutami a risolvere questo ridicolo problema! : P

+0

Qual è il colore del vostro UITableView sfondo? Se ne hai impostato uno, prova a impostarlo su "clear" (o su qualsiasi colore a tua scelta) nel tuo xib/storyboard. Normalmente in iOS7, è impostato su "predefinito", che è la causa della maggior parte di questi problemi. –

+0

Sembra che non importi. Ho provato a impostare il colore di sfondo di 'self.view' (che è la vista tabella) a' [UIColor clearColor] 'e ho anche cercato di incorporare la vista tabella in un' UIView' (la vista principale del controller vista) e impostare il colore di sfondo di questa vista per cancellare. Non funziona –

+0

Oh OK. Quindi probabilmente dovrai sovrascrivere la proprietà setSelected() del tuo UITableViewCell sottoclassi. O almeno utilizzare la proprietà backgroundView anziché backgroundColor. –

risposta

11
  1. creare una sottoclasse di UITableViewCell (Come ad esempio il nome: CustomCell), e l'override del metodo in CustomCell.m:

    - (id)initWithCoder:(NSCoder *)aDecoder{ 
        self = [super initWithCoder:aDecoder]; 
        if(self){ 
         // Initialization code 
         [self setBackgroundColor:[UIColor clearColor]]; 
         UIView * bgView = [[UIView alloc] initWithFrame:self.frame]; 
         [bgView setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.5]]; 
         [self addSubview:bgView]; 
        } 
        return self; 
    } 
    
  2. Rimuovere metodo willDisplayCell in MasterViewController.m

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        cell.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]; 
    } 
    
  3. Modificare il metodo cellForRowAtIndexPath in MasterViewController.m

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
        [self configureCell:cell atIndexPath:indexPath]; 
        return cell; 
    } 
    
  4. Modifica della cellula tipo di classe in storyboard enter image description here

Basta avere una prova: D

enter image description here

+1

TI AMO! Funziona come un fascino splendente. Perché è necessario aggiungere una visualizzazione personalizzata come vista di sfondo?Forse perche 'le proprietà 'backgroundView' e' backgroundColor' di 'UITableViewCell' funzionano in questo modo e non possiamo fare nulla per cambiare quel comportamento? Grazie uomo! PS: anche +1 per la GIF :-) –

+1

Funziona perfettamente con iOS6, impostando solo backgroundView della cella o backgroundColor.In realtà, non sono sicuro del perché le celle lampeggino durante l'aggiornamento in iOS7 ...: D – Joiningss

+0

Sì, è iOS 7 probabilmente. Comunque grazie ancora. –