La barra di stato non scomparirà


112

Sto creando un'applicazione e voglio che la barra di stato sia nascosta. Quando provo l'app, la barra di stato è nascosta mentre viene mostrata la schermata iniziale, ma una volta che l'app è completamente caricata, la barra di stato riappare.

Sto usando Xcode 5 e iOS 7 e ho provato a disabilitare programmaticamente la barra di stato

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

nel file info.plist e utilizzando l'ispettore degli attributi nel file .xib. Niente sembra funzionare.

Qualche idea?

Risposte:


220

Prova ad aggiungere il seguente metodo al controller di visualizzazione principale della tua app:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
Come farlo a livello globale?
jjxtra

16
Inoltre, come indicato nei documenti Apple, dovresti chiamare il [self setNeedsStatusBarAppearanceUpdate];dopo aver chiamato questo metodo con qualcosa di diverso dal valore predefinito (il valore predefinito è NO).
manderson

3
@PsychoDad Controlla la mia risposta per una soluzione più globale.
Idan

2
Perfetto, grazie. Non riesco proprio a capire perché iOS 7 stia facendo questo e non rispetti XIB che NON contengono impostazioni della barra di stato!
justinhartman

1
L'aggiunta di questo su un ViewController aggiunto allo stack è tutto ciò di cui ho bisogno per nascondere la barra di stato in quel viewcontroller; la barra di stato ritorna quando questo viewcontroller viene rimosso.
MacD

126

È necessario aggiungere questo valore a plist: " Visualizza l'aspetto della barra di stato basata su controller " e impostarlo su " NO ".

Ciò ti consentirà di impostare la barra di stato in modalità nascosta . Questo lo imposta su un valore globale a differenza di altre risposte fornite.

AGGIORNAMENTO: Se si desidera che la barra di stato venga nascosta nella schermata iniziale, non dimenticare di contrassegnare " Nascondi durante l'avvio dell'applicazione " nelle opzioni della barra di stato di destinazione. Inoltre, puoi aggiungere "La barra di stato è inizialmente nascosta " a " " nel plist se non vuoi farlo con il codice all'interno dell'app.


2
Mi ci è voluto molto tempo per capirlo. È un problema che penso tutti avrebbero e Apple non lo ha menzionato abbastanza. felice di aiutare ...
Idan

7
funziona bene, non dimenticare di impostare il valore .plist per "La barra di stato è inizialmente nascosta" su SÌ.
andreas-supersmart

1
Wow, questa era l'unica cosa che funzionava con Kobold2d 2.1.0 e iOS 7, grazie mille!
Binarian

5
Apple non è davvero un campione di compatibilità con le versioni precedenti. Balliamo tutti al suono del loro flauto e aggiorniamo ogni singola delle nostre app. Scusa, sfogo la frustrazione. Causato da Apple.
Henrik Erlandsson

1
finalmente funziona per me. Perché - (BOOL) prefersstatusbarhidden metodo non funziona in modelview.
utkal patel

73

Il codice che hai pubblicato funziona per iOS 6.1 e versioni precedenti. Per iOS 7, Apple ha reso disponibili nuovi metodi per controllare direttamente la barra di stato per ciascuna visualizzazione. Disattivando questa opzione nel tuo file Info.plist ti consentirà di nascondere la barra di stato, almeno per l'attuale Anteprima per sviluppatori (4).

Aggiungi questo e imposta su NO

Per riferimento, dai un'occhiata alla guida alla transizione di iOS 7 disponibile sul portale per sviluppatori di Apple.


3
Secondo me, questa risposta è migliore perché nella mia app voglio solo nascondere la barra di stato in modalità orizzontale, grazie!
Son Nguyen

grazie questo mi aiuta poiché voglio nasconderlo per tutta la mia app
kevinl

2
A mio parere, questa risposta dovrebbe essere la migliore risposta -> È spiegato qui developer.apple.com/library/prerelease/ios/documentation/…
marceloquinta

5
L'ho fatto, ma sembra che abbia appena nascosto la barra di stato, tuttavia, la mia app è ancora "spinta verso il basso" dalla quantità di spazio che occuperebbe la barra di stato e posso ancora vedere l'indicatore della batteria!
vedran

36

beh provo a nascondere la barra di stato in tutte le mie app e in "app" -info.plist e aggiungo due righe nel dizionario "Elenco proprietà informazioni" aggiungo "Visualizza aspetto barra di stato basato su controller" imposta NO e in " La barra di stato è inizialmente nascosta "imposta SÌ e per me funziona n_n '

informazioni plist


2
Ciò costringe la tua app a una modalità di compatibilità progettata esclusivamente per far funzionare le vecchie app come previsto su iOS 7 quando gli sviluppatori non hanno tempo per aggiustare l'app per il nuovo modo di fare le cose. Invece, è necessario implementare i metodi prefer * nei controller di visualizzazione.
lhunath

17

Tuttavia, se utilizzi UIImagePicker, la barra di stato viene nuovamente visualizzata.

In tal caso, dovresti nascondere la barra di stato come di seguito,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
Ho lo stesso problema. La barra di stato è nascosta finché non uso UIImagePicker. Ho provato la tua soluzione e non funziona per me. Ho bisogno di aggiungere qualcosa oltre al codice nel tuo post?
Dev01

@WootWoot Ho anche aggiunto - (BOOL) prefersStatusBarHidden {return YES; } per visualizzare i controller. Per favore provalo.
soli il

non sembra funzionare per me .. dovresti davvero chiamare setNeedsStatusBarAppearanceUpdate?
RyanM

Devo nascondere la barra di stato facendo clic su un pulsante. Ho provato sotto il codice ma non ha funzionato. Qualcuno può aiutarmi. [[UIApplication sharedApplication] setStatusBarHidden: YES];
janitheshan

8

Dopo alcune lunghe ricerche, ho finalmente trovato una soluzione molto semplice che si prende cura anche del file UIImagePickerController problema.

Come accennato nelle altre risposte, imposta la barra di stato nascosta in AppDelegate didFinishLaunching e imposta "Visualizza l'aspetto della barra di stato basata sul controller" su NO.

Quindi, nel tuo AppDelegate:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voilà: la barra di stato rimarrà nascosta anche quando UIImagePickerController è in primo piano.

È meglio che "nasconderlo" ogni volta che presenti un UIImagePickerController poiché rimane nascosto in tutta l'app.


2
Anche se qualcosa sembra ancora rotto in iOS7 almeno su iPad - l'UIImagePickerController lancia ancora una barra di stato la seconda volta che viene mostrato ... Hurrrr ... :-( Attualmente sto usando l'appDelegate insieme a nasconderlo di nuovo in ogni vistaWillAppear Quindi, anche se sembra sporco per un breve periodo, viene riparato di nuovo rapidamente.
ikuramedia

1
Questo è l'unico metodo che ha funzionato per me su iOS8 ... in qualche modo preferisce cheStatusBarHidden non venga chiamato sul mio controller di visualizzazione.
mojuba

7

Per nascondere la barra di stato su un particolare UIViewController, aggiungi semplicemente questo:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Spero che questo ti aiuti !


!! Questa è la soluzione che ha funzionato per me in iOS 9.2, la modifica del plist non ha avuto alcun effetto.
mico

5

Puoi nasconderti dal riepilogo del progetto. c'è una casella di controllo nascondi durante l'avvio.

Guarda l'istantanea

inserisci qui la descrizione dell'immagine


4

Ho trovato questa soluzione per me. Esso funziona magicamente. Scrivi questo codice sul tuo viewcontroller su cui desideri utilizzare UIImagePickerController.

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }

3

Oltre alla risposta da soli sopra, assicurati di implementare il metodo imagePickerControllerDidCancel e aggiungi lo stesso codice anche lì.


2

Avevo problemi anche con UIImagePicker. Simile alla risposta di Alones, la mia soluzione è stata la seguente. Ho aggiunto questa riga o codice:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

a questa funzione:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Non l'ho testato con iOS 6 o versioni precedenti, ma funziona benissimo su iOS 7.


2

Soluzione rapida

basta aggiungerlo ai controller di visualizzazione:

override func prefersStatusBarHidden() -> Bool {
    return true
}

0

Sto usando Xcode 6, questa soluzione funziona su iOS 7 e 8 per me:

Per prima cosa, impostare "Visualizza l'aspetto della barra di stato basata su controller" su NO nel file plist.

Secondo, in AppDelegate, aggiungi questo:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

Il mio problema era che utilizzavo il contenimento del controller di visualizzazione. Solo il controller di visualizzazione più in alto, che è incorporato ad esempio in un controller di navigazione, può nascondere o mostrare la barra di stato.

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.