2014-09-24 10 views
6

Sto creando un UITableViewController (nella radice di un UINavigationController) e lo presenta modalmente sopra un altro controller di visualizzazione. Ho funzionato in misura tale che quando si carica la vista e viewDidAppear viene chiamato, l'effetto visivo sembra buono. Ma subito dopo viewDidAppear, l'effetto visivo scompare e la tableview ha uno sfondo bianco.UIVisualEffectView su UITableView background

Nella mia presentato UITableViewController, ho aggiunto questo viewDidLoad:

if (NSClassFromString(@"UIVisualEffectView") && !UIAccessibilityIsReduceTransparencyEnabled()) { 
    self.tableView.backgroundColor = [UIColor clearColor]; 
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; 
    UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
    [blurEffectView setFrame:self.tableView.frame]; 

    self.blurView = blurEffectView; 
    self.tableView.backgroundView = self.blurView; 
} 

ho anche implementare questo, per assicurarsi che le cellule hanno uno sfondo chiaro:

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if (NSClassFromString(@"UIVisualEffectView")) { 
     cell.backgroundColor = [UIColor clearColor]; 
    } 
} 

Ho anche impostato il cell.backgroundColor = [UIColor clearColor] in TableView cellForRowAtIndexPath: ma questo non aiuta neanche.

Ancora una volta, ottengo l'effetto corretto quando la vista viene caricata, ma perde lo sfondo sfocato non appena appare sullo schermo. Qualche idea su cosa potrebbe andare storto? Ho anche cercato di mantenere la blueEffectView come una proprietà a mio controller della vista, ma senza fortuna

+0

avete una soluzione per il problema? Penso di avere lo stesso problema. Dopo aver impostato il BackgroundView 'tableView.backgroundView' ho uno sfondo grigio chiaro ** senza ** nessun effetto sfocato. – Stone

+0

@Stone ciao, ho avuto lo stesso problema. Hai qualche idea? –

+0

@Wongzigii sfortunatamente no. ancora nessuna soluzione. – Stone

risposta

3

Il problema è che, quando si presenta un controller di vista modale con le impostazioni di default, una volta che ha finito di prendere sopra lo schermo, il sottostante il controller di visualizzazione sembra essere essenzialmente cancellato. Questo è il motivo per cui il tuo effetto sfocato sembra fantastico fino al completamento dell'animazione della presentazione: la vista sottostante scompare.

Per implementare il comportamento desiderato, è necessario modificare lo stile di presentazione seguito in qualcosa che conserverà il controller di visualizzazione sottostante, ad esempio Schermo intero pieno anziché Schermo intero predefinito.

Si noti che quando si chiude questa presentazione modale, viewDidAppear non verrà chiamato sul controller della vista di presentazione, perché è ora sempre visibile. Questo ti può mordere se ti affidi a quel metodo per svolgere qualsiasi funzione dopo il licenziamento.

+0

Aveva un problema simile. E questa soluzione ha fatto il trucco !! Ecco come ho fatto a livello di codice (Obj-C e Swift) 'viewToBePresented.modalPresentationStyle = UIModalPresentationCurrentContext; viewToBePresented.modalTransitionStyle = UIModalTransitionStyleCoverVertical; ' ' viewToBePresented.modalTransitionStyle = UIModalTransitionStyle.CoverVertical viewToBePresented.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen' – Priest

+0

@Priest si dispone di un errore di battitura: l'modalPresentationStyle che si desidera è UIModalPresentationOverCurrentContext (Obj-C) e OverCurrentContext (Swift) –

6

Stai usando Storyboard?

Selezionare il controller di visualizzazione che viene utilizzato in modo modale (o se è racchiuso in un altro VC, selezionare il wrapper) e impostare la casella combinata di Presentazione su "Over Full Screen" o "Over Current Context". (Io in realtà non so quale sia la differenza, entrambi sembrano fare la stessa cosa.)

Screenshot of Xcode

Dopo aver fatto questo, il vostro effetto di sfocatura dovrebbe funzionare ™. Inoltre, penso che questo sia nuovo in iOS 8, non ho ancora provato questo in iOS 7.

Problemi correlati