2013-08-13 16 views
14

Nello storyboard, in un controller di visualizzazione ho provato ad aggiungere una barra di navigazione sotto la barra di stato, eseguirla, è trasparente e mostra un'etichetta che dovrebbe essere sfocata, come nella barra di navigazione.iOS 7 status bar transparent

enter image description here

Ma quando si posiziona lo stesso controller vista incorporata in un controller della vista di navigazione, l'immagine di sfondo sottostante potrebbe essere offuscata, che è la mia intenzione.

enter image description here

Quali sono queste due vie risultati diversi? Che cosa è necessario fare per il metodo firs per rendere sfocata la barra di stato?

Grazie!

+1

@Caleb vedere http://meta.stackexchange.com/questions/94465/should-moderators-enforce-ndas-for-software-vendors –

+2

@Caleb - Inoltre, i miei pensieri sulla NDA e Stack Overflow può essere trovato in questa risposta su Meta: http://meta.stackexchange.com/questions/184625/why-is-there-an-ios-7-tag/184635#184635 –

+0

@BradLarson Forse dovrei fare un po 'di tempo per rispondere alla tua meta discussione invece di farlo qui. In breve, abbiamo una storia di domande conclusive che violano la NDA di iOS, e penso che sia importante * almeno * segnalare tali domande con un commento. Se mi stai dicendo che la tua posizione è la posizione di tutti i moderatori SO, o di SE in generale, non mi dispiace non votare per chiudere su quella base. OTOH c'è un chiaro valore nelle domande di chiusura a cui non si può rispondere. – Caleb

risposta

4

In iOS 7 la barra di stato è trasparente per impostazione predefinita. La sfocatura che stai vedendo quando c'è anche una barra di navigazione viene effettivamente creata dalla barra di navigazione. Quindi, per creare l'effetto che stai cercando senza una barra di navigazione, devi posizionare una vista che produca un effetto sfocato sotto la barra di stato.

Per riferimento, aggiungere la tua vista con un telaio fornito da:

CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; 
+0

Ciao, grazie per il tuo suggerimento. ma non sono sicuro di come procedere con il tuo. Potresti dire di più? – S1U

+0

Vorrei provare a riformulare nel caso in cui aiuti: in iOS la barra di stato è trasparente, e vista i controller occupano l'intero schermo per impostazione predefinita. Questo è il grande cambiamento, mi ci è voluto un po 'per abituarmici (e spero di non aver sbagliato qui, ho appena lavorato con iOS 7 per un paio di settimane). Quindi hai solo bisogno di mettere una vista sotto la barra di stato in qualsiasi colore tu voglia.La barra del controller di navigazione fa questo per te, quando non hai una barra di navigazione devi farlo tu stesso. È più chiaro? –

+0

Quindi come rendere la barra di stato traslucida dopo aver creato una cornice? –

2

non ho ancora testato questo completamente, ma andare al file plist e verificare le seguenti impostazioni:

"View Controller aspetto barra di stato basato su ": Se impostato su" Sì ", dovrebbe visualizzare una barra di stato che è univoca per ciascun controller di visualizzazione, che potrebbe essere quello che ti serve.

"Stile barra di stato": è possibile impostare questo a tre stili diversi: nero opaco, grigio e nero trasparente.

Fammi sapere se questo ha funzionato per te.

1

UINavigationController modificherà l'altezza della sua UINavigationBar a 44 o 64 punti, a seconda di un insieme di vincoli piuttosto strano e non documentato. Se UINavigationController rileva che la parte superiore della cornice della sua vista è visivamente contigua con la parte superiore di UIWindow, disegna la sua barra di navigazione con un'altezza di 64 punti. Se la parte superiore della sua vista non è contigua con la parte superiore di UIWindow (anche se è disattivata da un solo punto), disegna la sua barra di navigazione in modo "tradizionale" con un'altezza di 44 punti. Questa logica viene eseguita da UINavigationController anche se ci sono diversi bambini nella gerarchia del controller di visualizzazione dell'applicazione. Non c'è modo di prevenire questo comportamento.

Sembra che si stia posizionando la gerarchia di viste nel primo esempio a partire dal punto (0,20). Inoltre, è una UIToolbar o una UINavigationBar? Se è il secondo, perché lo usi da solo e non lo usi all'interno di UINavigationController?

Se non si utilizza UINavigationController e si utilizzano invece contenitori di visualizzazione personalizzati, è necessario posizionare le visualizzazioni di conseguenza.

Vedere this answer per una spiegazione approfondita.

1

devo simile progettazione dell'interfaccia utente e sulla base Matt Hall answer e some article Googled, vengo con qualcosa di simile:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if (NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_6_1) { 
    CGRect statusBarFrame = [self.view convertRect: [UIApplication sharedApplication].statusBarFrame fromView: nil]; 
    UIToolbar *statusBarBackground = [[UIToolbar alloc] initWithFrame: statusBarFrame]; 
    statusBarBackground.barStyle = self.navBar.barStyle; 
    statusBarBackground.translucent = self.navBar.translucent; 
    statusBarBackground.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth; 
    [self.view addSubview: statusBarBackground]; 
    } 
} 

Dove self.navBar punti alla barra di navigazione aggiunto in storyboard. Questo è necessario solo nel caso in cui venga eseguito su iOS7, ecco perché ho aggiunto questa condizione (la mia app deve supportare iOS5).

Questo funziona come un fascino.


approccio alternativo (far rispettare dimensione barra di stato) è anche un bene:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if (NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_6_1) { 
    CGRect statusBarFrame = [self.view convertRect: [UIApplication sharedApplication].statusBarFrame fromView: nil]; 
    self.navBar.frame = CGRectUnion(statusBarFrame, self.navBar.frame); 
    } 
} 


ho trovato un'altra soluzione Credo che questo sia migliore dal momento che coinvolgono solo storyboard e nessun codice è necessario.

  1. Passa vista storyboard al 6,1 modalità (Vedi come: iOS 6.1 e versioni precedenti) change view mode
  2. Selezionare problematico UINavigationBar
  3. nella sezione taglie Aggiungi 20 altezza delta "iOS6/7 Delta" correct size of navigation bar
  4. Interruttore vista posteriore alla modalità 7.0 (visualizza come: iOS 7.0 e versioni successive) e sii felice del risultato.
3

So che questo è vecchio, solo per riferimento, ho risolto questo impostando self.navigationController.navigationBar.clipToBounds = NO

0

quando si incorpora vista controllore con visualizzazione di navigazione del controller che il tempo si vedrà barra di navigazione a tutti i controller di vista si sta spingendo a dallo stesso controller di visualizzazione. Nel primo caso si aggiunge l'oggetto della barra di navigazione, quindi è possibile selezionare il controller di visualizzazione dallo storyboard, passare alla scheda degli ispettori attributi & dalla barra di selezione superiore come barra di navigazione traslucida. enter image description here