Impossibile nascondere la barra di stato in iOS7


267

Ho appena aggiornato il mio iPhone 5 iOS 7 alla versione beta quattro. Ora, quando eseguo la mia app da Xcode 5 su questo iPhone, la barra di stato non si nasconde, anche se dovrebbe.

Non funziona:

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

Non funziona:

[UIApplication sharedApplication].statusBarHidden = YES;

Impossibile accedere ai forum degli sviluppatori Apple


15
Non vera, la mia risposta ha coinvolto Xcode e questo è stato mostrato al grande pubblico. È troppo generale dire 'se rispondi a questa, è una violazione della NDA' .. lascia che gli sviluppatori lo decidano da soli ;-)
Jake,

l'eventuale duplicato della barra
ekhumoro,

come nascondere la barra di stato a livello di programmazione ViewController particolare?
bhavik,

Risposte:


558

nel file plist delle tue app aggiungi una riga chiamala "Visualizza l'aspetto della barra di stato basata sul controller" e impostala su NO

Si noti che semplicemente non funziona se si utilizza UIImagePickerController nell'app.

da http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , la soluzione di mgiroux

Un esempio di aggiunta di View Base Controller alle impostazioni di Info in Xcode


3
Sorprendente! Perdo ore su questo! Grazie!
Idan

12
Per riferimento, viene chiamato il valore grezzo memorizzato nel file Info.plist effettivo UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield,

55
L'unico problema con questo approccio è che se si utilizza UIImagePickerController per selezionare le immagini, la barra di stato verrà nuovamente visualizzata. L'unico modo sicuro per impedire ciò è implementare il metodo PrefersStatusBarHidden in ciascuno dei controller di visualizzazione e reimpostare UIViewControllerBasedStatusBarAppearance impostare l'impostazione come vera.
Jason Fuerstenberg

5
Davvero non so perché Apple abbia cambiato questo! Grazie :)
Mohamed Amine

18
È inoltre necessario impostare Status bar is initially hiddensu .
Zorayr,

277

Aggiungi metodo nel tuo controller di visualizzazione.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
Per tutti coloro che cercano, questo è il modo di farlo se si desidera rimuovere dinamicamente la barra di stato in determinate viste. Questo metodo funziona indipendentemente da ciò che hai impostato "Visualizza aspetto della barra di stato basata su controller" nella tua lista!
Mr. T

2
+1 b / c Sto cercando la possibilità di mostrare / nascondere dinamicamente la barra di stato. Il metodo di impostazione dell'elenco P (vedi post di @Satgi sopra) è comunque il modo migliore per mostrare / nascondere la barra di stato a livello globale.
JonnyB,

Se hai una galleria fotografica da qualche parte, di solito vuoi nascondere i controlli solo lì, e puoi anche attivarla / disattivarla. Questo non funziona per me, la funzione non è nemmeno chiamata. Ho nello stesso posto un preferitoStatusBarStyle e si chiama
Cristi Băluță

4
@ Mr.T In iOS 8, non sembra più il caso. Se si imposta l'aspetto della barra di stato basata sul controller di visualizzazione su NO e si ritorna true da prefersStatusBarHiddenin un controller di visualizzazione, non funzionerebbe. La barra di stato appare ancora.
Isuru,

1
@Isuru perché hai impostato NO? Se si imposta su SÌ, si chiederebbe a tutti i controller di visualizzazione nell'altro caso, ovviamente.
invoodoo,

84

Nel Plist aggiungere le seguenti proprietà.

-> Status bar is initially hidden= SÌ

-> View controller-based status bar appearance= NO

Aggiungi entrambi: ora la barra di stato scompare.


Sì, ha funzionato anche per me. Senza impostare l'opzione "La barra di stato è inizialmente nascosta" su SÌ non funziona come previsto. Grazie.
AndrewShmig,

53

Per nascondere la barra di stato in una vista singola, è necessario utilizzare:

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

Inizialmente, questo non ha funzionato per me, quindi una sega nella documentazione di questo metodo che dice: // L'impostazione di statusBarHidden non fa nulla se l'applicazione utilizza il sistema di barre di stato basato su UIViewController predefinito.

Questo deve essere fatto sul file plist, aggiungendo il View controller-based status bar appearanceset di chiavi a NO. E poi ha funzionato.


16

Per utilizzare il metodo UIApplication legacy per nascondere / mostrare la barra di stato, l'app deve impostare un valore plist per iOS 7:

View-Controller Based Status Bar Appearance = NO

Questo valore è impostato su SÌ per impostazione predefinita. Se lo si modifica in NO, è possibile utilizzare i metodi legacy. Se lo lasci impostato su SÌ, puoi comunque nascondere la barra di stato, ma spetta a ciascuna sottoclasse del controller di visualizzazione nella tua app sovrascrivere: prefersStatusBarHiddenper restituire SÌ.

Ogni volta che l'app deve cambiare l'aspetto o la visibilità della barra di stato e l'apparenza della barra di stato basata sul controller di visualizzazione è impostata su SÌ, il controller della vista più esterno deve chiamare:

setNeedsStatusBarAppearanceUpdateAnimation


Ho dovuto fare domanda per le proprietà di destinazione iOS personalizzate, perché nella
tabella

16

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

  1. inapplication: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsscrivere

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

    View-Controller Based Status Bar Appearance = NO

2
Solo per ripulirlo, se lo metti dentro didFinishLaunching puoi semplicemente scrivere [application setStatusBarHidden:YES];oapplication.statusBarHidden = YES;
joel.d

potrebbe esserci un refuso nella risposta sopra. "Aspetto barra di stato basata su controller di visualizzazione = NO" non ha funzionato per me, ma "Visualizza aspetto barra di stato basata su controller = NO" ha funzionato.
martedì

11

Esistono così tante combinazioni suggerite per questo problema, ma il problema è che iOS 6 e 7 usano metodi diversi per nascondere la barra di stato. Non sono mai riuscito a configurare le impostazioni del plist per abilitare il comportamento in stile iOS6 su iOS 7, ma se stai costruendo la tua app per supportare iOS 6+, devi utilizzare 3 metodi contemporaneamente per assicurarti che un particolare controller di visualizzazione nasconda lo stato bar:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

Questo dovrebbe funzionare indipendentemente dalle impostazioni del tuo plist.


7

Ho dovuto fare entrambe le modifiche di seguito per nascondere la barra di stato:

Aggiungi questo codice al controller di visualizzazione in cui desideri nascondere la barra di stato:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Aggiungi questo al tuo file .plist (vai a "info" nelle impostazioni dell'applicazione)

View controller-based status bar appearance --- NO

Quindi puoi chiamare questa linea per nascondere la barra di stato:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

Aggiungi queste 2 righe nel file info.plist. Farà la correzione per iOS7 e versioni precedenti entrambe.

  • La barra di stato è inizialmente nascosta = SÌ
  • Visualizza l'aspetto della barra di stato basata sul controller = NO

Passare al progetto e selezionare Target -> Generale e vedere la casella di controllo "Stile barra di stato ... Nascondi all'avvio dell'applicazione" verrà selezionata. Questo funzionerà.


6

Prova questo semplice metodo:

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

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

4

L'unica cosa che ha funzionato per me è aggiungere quanto segue nel tuo plist

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

4

Il metodo più semplice che ho trovato per nascondere la barra di stato nell'intera app è la creazione di un categoryon UIViewControllere l'overrideprefersStatusBarHidden . In questo modo non è necessario scrivere questo metodo in ogni controller della vista singola.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end

la migliore soluzione reale, iOS7, non fasulla, fantastica
Fattie

3
  1. In plist aggiungere ----

    Visualizza l'aspetto della barra di stato basata sul controller --- NO

  2. In ogni viewController scrivi

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

Per il problema della barra di stato in iOS 7, ma l'obiettivo dovrebbe essere 5.1 e versioni successive per l'app


3

Molte delle risposte su questo thread funzionano, ma è mia comprensione se stai cercando di fare qualcosa di dinamico che alla fine dovrai chiamare:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

Passaggi per Nascondi la barra di stato in iOS 7:

1. Vai al file info.plist dell'applicazione.

2.E impostare, Visualizza l'aspetto della barra di stato basata sul controller: NO booleano

Spero di aver risolto il problema della barra di stato .....


3

Per iOS 7 in una vista singola utilizzare in viewWillappear method:

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

Per visualizzare la barra di stato utilizzare:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];


2

Nel file della scheda Informazioni Aggiungi una riga per la seguente proprietà

Nome proprietà: visualizza l'aspetto della barra di stato basata sul controller

Valore: NO


1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

Ho provato tutte queste opzioni pubblicate qui sul mio progetto e non funzionavano. Ho pensato che potesse essere dovuto al fatto che avevo aggiornato la mia Xcodee quindi l'app su iOS 7 e alcune impostazioni erano state incasinate da qualche parte. Ho deciso di costruire un progetto completamente nuovo per esso e dopo aver semplicemente impostato: " Status bar is initially hidden = YES" e " View controller-based status bar appearance = NO", come affermato da molti altri, ha funzionato correttamente (cioè nessuna barra di stato).

Quindi il mio consiglio se stai lavorando a un progetto che è stato aggiornato a iOS 7 da una versione precedente e hai provato tutte le altre opzioni è quello di costruire un nuovo progetto.


Ho usato questa stessa tecnica per confermare inizialmente che potevo nascondere la barra di stato a livello globale, per ogni schermata, ma poiché la mia app è piuttosto "incentrata sul tempo", volevo che il tempo fosse visualizzato per la maggior parte delle schermate. È solo uno schermo che volevo escluderlo per vari motivi. Ho finito per usare l'opposto dei tuoi parametri: inizialmente nascosto = NO e aspetto barra di stato basata su VC = SÌ. Quindi ho dovuto mettere il metodo (BOOL) prefersStatusBarHidden (restituendo YES) nell'unico VC dove lo volevo nascosto. Funziona bene. Dovrei aggiungere che la mia app è solo iOS7 per altri motivi.
bob

1

Per il 2019 ...

Per creare un'app senza barre di stato,

Fai clic su info.plist, fai clic con il pulsante destro del mouse su "Aggiungi riga".

Aggiungi questi due, con queste impostazioni:

inserisci qui la descrizione dell'immagine

Questo è tutto quello che c'è da fare.



0

Per Swift 2.0+ IOS 9

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

0

Per nascondere la barra di stato per viewController specifico

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Per impostare la barra di stato Nascosto per l'applicazione:

  • impostato View controller-based status bar appearancesu NOin .plist e in application: didFinishLaunchingWithOptions:set: [application setStatusBarHidden:YES];

    Nota: setStatusBarHidden: obsoleto

O

  • in Impostazioni progetto -> Scheda Generale -> Informazioni sulla distribuzione

    Hide Status barCasella di controllo .


-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

La domanda menziona esplicitamente che questo approccio non funziona. Per favore, leggi attentamente la domanda prima di rispondere.
Borys Verebskyi,

Finché l'aspetto della barra di stato basata su controller è impostato su NO, è l'approccio più pulito.
Evan Ische,

-7

Non sono sicuro del motivo per cui "non riesci ad accedere ai forum degli sviluppatori Apple", ma (senza violare la NDA) puoi anche nascondere il tuo statusBar tramite Xcode. È un'impostazione generale sulla destinazione dell'applicazione.inserisci qui la descrizione dell'immagine


no, funziona come un fascino. i forum sono attivi da un po 'di tempo.
Jake,
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.