Come nascondere la barra di stato iOS


219

Nella mia barra di stato dell'app video iOS è nascosta in alcuni controller di visualizzazione. Ho fatto questo usando il seguente codice.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Funziona con iOS 5 e iOS 6, ma non con iOS 7.

  • Ho provato con questo in particolare il controller di visualizzazione,

Per esempio:

-(BOOL)prefersStatusBarHidden { return YES; }

Funziona bene, ma non posso mostrare di nuovo la barra di stato nel controller della vista padre.



1
Se lo stile della barra di stato è impostato nello Storyboard, dopo aver modificato la "Visualizza barra di stato basata sul controller" (di seguito), potrebbe essere necessario impostare lo stile nel plist perché l'impostazione del controller di visualizzazione non sarà più utilizzata. stackoverflow.com/questions/18924345/…
Matt

1
Ho risposto in un'altra domanda. Prova questo. [il modo più semplice per nascondere la barra di stato a livello di codice] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru,

1
Ho usato un trucco per questo - l'ho pubblicato come pod cocoapods.org/pods/UIViewController+ODStatusBar , spero che possa essere utile a chiunque
Alex Nazarsky,

Le risposte qui sono state deprecate. Ho avuto difficoltà a trovare la risposta corretta per iOS 9 quando ho nascosto la barra di stato PER JUST THE LAUNCH SCREEN , quindi collegandomi di seguito in modo che sia più facile per gli altri trovare il modo di farlo: stackoverflow.com/questions/34413848/…
Ben

Risposte:


277

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

inserisci qui la descrizione dell'immagine


40
Per riferimento, la chiave grezza èUIViewControllerBasedStatusBarAppearance
William Denniss,

1
@ Rajneesh071 Cosa devo fare se voglio impostare favoriteStatusBarStyle per il lavoro di cui ho bisogno "View controller-based status bar appearance" set it to "YES".?
Bimawa,


quale problema stai affrontando?
Rajneesh071,

sembra deprecato, romperà la tua app
Ben

194

Aggiungi quanto segue al tuo Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Immagine


Funziona alla grande in Xcode 11.3, iOS 13
Wayne Henderson il

113

Aggiungi la seguente riga in viewdidload

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];

e aggiungi un nuovo metodo

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

modifica anche il file info.plist Visualizza l'aspetto della barra di stato basata sul controller "= NO

funziona per me


Grazie, questo funziona per me, ma devo aggiungere anche la riga sotto in plist. "Visualizza aspetto barra di stato basata su controller" = NO i, e Aggiungi la seguente riga in viewdidload [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; e aggiungi un nuovo metodo - (BOOL) prefersStatusBarHidden {return YES; } Aggiungi "Visualizza aspetto barra di stato basata su controller" = NO nel file Plist
sabbioso

prefersStatusBarHiddenè quello che ha fatto il trucco per me (sia con questa soluzione che con altre simili)
Abdo,

34

Nel Plist aggiungere le seguenti proprietà.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

ora la barra di stato verrà nascosta.


8
Le chiavi non elaborate sarebbero UIStatusBarHidden e UIViewControllerBasedStatusBarAppearance
leolobato

27

Prova questo semplice metodo:


Objective-C:

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

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

Swift:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
Questa è stata una risposta meravigliosa! Provalo anche con le varie UIStatusBarAnimations, sono piuttosto fantastiche.
VedTopkar,

Non dimenticare [super viewWillAppear:animated]e[super viewWillDisappear:animated]
SamB,

1
Questa semplice soluzione ha funzionato per me iOS 10. Modo di essere semplice uomo!
coolcool1994,

14

Ho fatto quanto segue e sembra funzionare (anche in iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarX è obsoleto a partire da iOS9
  • È obsoleto avere UIViewControllerBasedStatusBarAppearance = NO nel tuo info.plist
  • Quindi dovremmo usare PreferStatusBarX in tutti i nostri controller di visualizzazione

Ma diventa più interessante quando c'è un UINavigationController coinvolto:

  • Se navigationBarHidden = true, viene chiamato loStatusBarX preferito di UIViewController, poiché il bambino visualizza il contenuto nella barra di stato.
  • Se navigationBarHidden = false, viene chiamato loStatusBarX preferito di UINavigationController, dopo tutto visualizza il contenuto nella barra di stato.
  • Il preferitoStatusBarStyle predefinito di UINavigationController utilizza il valore di UINav.navigationBar.barStyle. .Default = contenuto della barra di stato nero, .Black = contenuto della barra di stato bianco.
  • Quindi, se stai impostando barTintColor su un colore personalizzato (che probabilmente sei), devi anche impostare barStyle su. Black per ottenere il contenuto della barra di stato bianca. Prima di impostare barTintColor, avrei impostato barStyle su nero, nel caso in cui barStyle abbia la precedenza su barTintColor.
  • Un'alternativa è che puoi eseguire la sottoclasse di UINavigationController invece di fare confusione con lo stile della barra.
  • TUTTAVIA, se si esegue la sottoclasse di UINavigationController, non si ottiene alcun controllo sulla barra di stato se navigationBarHidden = true. In qualche modo UIKit va direttamente al bambino UIViewController senza chiedere a UINavigationController in questa situazione. Avrei pensato che sarebbe stata responsabilità di UINavigationController chiedere al bambino> scrollate di spalle <.
  • E UIViewController visualizzato in modo modale può solo dire qualcosa nella barra di stato se modalPresentationStyle = .FullScreen.
  • Se hai un controller di visualizzazione modale in stile presentazione personalizzato e vuoi davvero che controlli la barra di stato, puoi impostare modalPresentationCapturesStatusBarAppearance = true.

Perché la mela non può seguire solo un consiglio? Se non è rotto, non ripararlo!
Jargen89,

9

Per nascondere la barra di stato in iOS7 sono necessarie 2 righe di codice

  1. nell'applicazione: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
  2. in info.plist aggiungi questo

     View-Controller Based Status Bar Appearance = NO
    

8

Per una migliore comprensione aggiungere alcune foto con commenti:

App prima di qualsiasi modifica

inserisci qui la descrizione dell'immagine

Trovato nella Project Navigatorcartella denominata Supporting Filese fai clic sul file * .plist

inserisci qui la descrizione dell'immagine

Dopo che avrai mostrato diverse impostazioni della tua app. Devi aggiungere 2 chiavi UIStatusBarHiddene UIViewControllerBasedStatusBarAppearance. Puoi farlo semplicemente facendo clic sul pulsante +

inserisci qui la descrizione dell'immagine

Dopo aver premuto + puoi scegliere uno dei tasti: inizia a digitare.

Versione corretta:

inserisci qui la descrizione dell'immagine

E infine l'applicazione dopo aver applicato queste modifiche:

inserisci qui la descrizione dell'immagine

Inoltre, puoi trovare una soluzione alternativa qui


8

In iOS10 tutto quello che dovevo fare è sostituire il prefersStatusBarHiddenvar nel mio RootViewController(Swift):

override var prefersStatusBarHidden: Bool {
    return true
}

7

Prova questo;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

Grande. Sono stato in grado di utilizzare questo per nascondere la barra di stato sul controller di visualizzazione su cui non era necessario, quindi scoprirlo una volta che l'utente ha effettuato l'accesso.
LondonGuy

5

Per nascondere la barra di stato in iOS7:

Apri il tuo file plist, quindi aggiungi una riga chiamata "Visualizza l'aspetto della barra di stato basata sul controller" e imposta il suo valore su NO.


5

Ecco la versione Swift (pre iOS9):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

Questo funziona anche (iOS7 +):

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

Devi anche chiamare:

setNeedsStatusBarAppearanceUpdate()

in dire viewDidLoad().

Nota che se usi un controller SplitView o un altro containercontroller di visualizzazione, devi anche restituirlo alla tua classe quando viene inviato childViewControllerForStatusBarHidden. Un modo per farlo è avere un var pubblico debole per dire statusController, e restituirlo in questo metodo ignorato.


1
Il blocco superiore è obsoleto in iOS8: usa il tuo secondo approccio. E grazie! Ho modificato il codice per aggiungere un'altra chiamata obbligatoria.
David H,

5

iOS 9 in poi:

Come statusBarHiddenmetodo è stato Sconsigliata da iOS9 è necessario aggiungere due valori in plist come di seguito:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

o dall'interfaccia utente Fare riferimento sotto l'immagine:

inserisci qui la descrizione dell'immagine

Come statusBarHiddenè deprecato da iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden ns_ DISAPPROVATO _IOS (2_0, 9_0 , "Usa - [UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


5

SOLUZIONE FISSA PER SWIFT 3+ (iOS 9, 10)

1- In info.plist impostato sotto la proprietà

inserisci qui la descrizione dell'immagine

2- Incolla sotto il codice nel controller principale, A

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Puoi chiamare isStatusBarHidden = truee isStatusBarHidden = falsedove vuoi hide/showbarra di stato


4

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


4

Passaggi per nascondere la barra di stato in iOS
1. aprire il file AppDelegate.m , aggiungere application.statusBarHidden nel metodo didFinishLaunchingWithOptions

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. apri info.plist e imposta

View controller-based status bar appearance impostato NO


4

Swift 5

Utilizzare i passaggi seguenti per nascondere la barra di stato iOS:

  1. Apri su Info.plist.
  2. Aggiungi nuova chiave Visualizza l'aspetto della barra di stato basata sul controller e il valore impostato su NO .
  3. Aggiungi nuova chiave La barra di stato è inizialmente nascosta e il valore impostato su .
  4. Ricompilare il progetto.
  5. La barra di stato dovrebbe ora essere nascosta sul telefono iOS.

Schermata Impostazioni finali:

Impostazioni finali

Questo funziona su Xcode 10.2


2

Da UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Quindi dovrebbe essere impostato View controller-based status bar appearancesu NO


2

Per rispondere alla domanda di Susitha: usa setNeedsStatusBarAppearanceUpdate . Ciò effettuerà una chiamata a prefersStatusBarHidden per l'aggiornamento con lo stato della barra di stato desiderato. Prova questo:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

Se vuoi vedere di nuovo la barra di stato, imposta la tua proprietà hideStatusBar (o come la chiami) su NO. Chiama preferStatusBar Nascosto indirettamente effettuando un'altra chiamata a

[self setNeedsStatusBarAppearanceUpdate]

1

Aggiornamento per Swift 3:

Aggiorna Info.plist con le seguenti informazioni:

View controller-based status bar appearance: NO

Quindi, in un ViewController o altrove:

UIApplication.shared.isStatusBarHidden = true

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.