2015-02-04 5 views
6

Sto tentando di aggiungere un effetto sfocato a una barra di navigazione e una barra di stato. Il mio problema è che la sfocatura va benissimo sulla barra di navigazione, ma la barra di stato non diventa sfocata.iOS 8 - Applica sfocatura alla barra di navigazione E barra di stato

La mia domanda è: come posso estendere i limiti per comprendere la barra di stato?

sto usando il seguente metodo per creare l'effetto di sfocatura:

- (void) addBlurEffect { 

CGRect bounds = self.navigationController.navigationBar.bounds; 
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]]; 
visualEffectView.frame = bounds; 
visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
[self.navigationController.navigationBar addSubview:visualEffectView]; 
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 
[self.navigationController.navigationBar sendSubviewToBack:visualEffectView]; 

}

Nel mio plist, mi hanno vista basata su controller barra di stato l'aspetto YES

In viewDidLoad Chiamo un metodo:

- (void)configureView { 

    // style controls 

    self.addAirportButton.tintColor = [UIColor whiteColor]; 

    // style background image 

    UIImageView *sidebarBackground = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sidebarBackground"]]; 
    self.tableView.backgroundView = sidebarBackground; 

    // style navigation bar 

    self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; 

    // this makes navigation bar transparent 

    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] 
                forBarMetrics:UIBarMetricsDefault]; 
    self.navigationController.navigationBar.shadowImage = [UIImage new]; 
    self.navigationController.navigationBar.translucent = YES; 

    // style toolbar 

    self.navigationController.toolbar.translucent = YES; 
    self.dismissAdsButton.tintColor = [UIColor whiteColor]; 

non viene eseguito altro elemento importante in viewDidLoad. Quando lo costruisco, ecco come appare la vista: è un tavoloViewController incorporato in un NavigationController e sto utilizzando anche l'eccellente SWRevealViewController.

vedere come la barra di stato non è sfocata:

The blur is only in the navigation bar part - the status bar is not blurred

Qualsiasi aiuto sarebbe molto apprezzato!

UPDATE:

Vedere la risposta sotto. Ecco uno screenshot della soluzione implementata:

screenshot with solution applied

+0

Hai provato chiamando tutto questo da viewWillAppear invece di viewDidLoad quando la vista è in procinto di apparire per la prima volta? –

+0

L'ho provato, nessun cambiamento, sfortunatamente. –

risposta

5

ho cercato di realizzare effetto simile, dopo tweaking con le API del UINavigationBar e non riuscivo a raggiungere il risultato desiderato, ho trovato una soluzione:

  1. crea un UIView delle stesse dimensioni di NavigationBar + StatusBar. Cioè, avrebbe una cornice di (0, 0, w, 64), dove w è la larghezza dello schermo. (L'ho fatto tramite Storyboard e ho usato l'autolayout per impostare il vincolo della larghezza per essere uguale a quello della sua superview)

  2. impostare il coloredi UIView per cancellare il colore.

  3. rendono il navigationBar completamente trasparente con il seguente codice: navBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navBar.shadowImage = UIImage() navBar.translucent = true

  4. ora applicare l'effetto sfocatura a quella vista, questo crea l'illusione che l'effetto sfocatura era sia dalla barra di navigazione e la barra di stato.

Vedi this picture per effetto ottenuto (mi dispiace non posso postare un'immagine ancora a causa di restrizioni reputazione).

Spero che questo aiuti.

UPDATE 2015/05/28:

Ecco come ho raggiunto il suddetto metodo in StoryBoard:

  1. Creare la barra di navigazione Punto di vista nella gerarchia più in alto come un figlio diretto della vista principale . Si noti che tutto il resto li ho avvolti in un'unica vista del contenuto. La vista del contenuto è colorata in rosso e la vista di sfondo della barra di navigazione è di colore bianco semitrasparente.

enter image description here

  1. aggiuntivo dopo 4 vincoli sulla barra di navigazione Punto di vista, come ad esempio: 0 per la sinistra, a destra, e top vincolo, e 64 per vincolo di altezza.

+0

Molto bello. Ho intenzione di provare questo. –

+0

In che modo è stato possibile aggiungere UIView nella struttura dello storyboard? Puoi pubblicare uno screenshot dello storyboard e della vista della struttura? –

+0

hi @ChrisHolloway, ho aggiornato la mia risposta con screenshot. Non esitate a farmi sapere se avete bisogno di ulteriori chiarimenti. – saulgoodman