Die Statusleiste verschwindet nicht

112

Ich erstelle eine Anwendung und möchte, dass die Statusleiste ausgeblendet wird. Wenn ich die App teste, wird die Statusleiste ausgeblendet, während der Begrüßungsbildschirm angezeigt wird. Sobald die App vollständig geladen ist, wird die Statusleiste erneut angezeigt.

Ich verwende Xcode 5 und iOS 7 und habe versucht, die Statusleiste programmgesteuert zu deaktivieren

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

in der Datei info.plist und mit dem Attributinspektor in der .xib-Datei. Nichts scheint zu funktionieren.

Irgendwelche Ideen?

user2397282
quelle

Antworten:

220

Versuchen Sie, dem Root View Controller Ihrer App die folgende Methode hinzuzufügen:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
QUentin
quelle
2
Wie geht das global?
jjxtra
16
Wie in den Apple-Dokumenten angegeben, sollten Sie die [self setNeedsStatusBarAppearanceUpdate];Methode nach dem Aufrufen dieser Methode mit einem anderen Wert als dem Standardwert aufrufen (der Standardwert ist NO).
Manderson
3
@PsychoDad Überprüfen Sie meine Antwort für eine globalere Lösung.
Idan
2
Perfekt, danke. Ich kann einfach nicht herausfinden, warum iOS 7 dies tut und XIBs, die KEINE Statusleisteneinstellungen enthalten, nicht respektiert!
Justinhartman
1
Das Hinzufügen zu einem ViewController, der dem Stapel hinzugefügt wurde, ist alles, was ich brauche, um die Statusleiste in diesem Viewcontroller auszublenden. Die Statusleiste kehrt zurück, wenn dieser Ansichtscontroller entfernt wird.
MacD
126

Sie sollten diesen Wert zu plist hinzufügen: " Anzeige der Controller-basierten Statusleiste anzeigen " und auf " NEIN " setzen " setzen.

Auf diese Weise können Sie die Statusleiste in den versteckten Modus versetzen . Dies setzt es im Gegensatz zu anderen bereitgestellten Antworten auf ein globales Niveau.

UPDATE: Wenn Sie möchten, dass die Statusleiste auf dem Begrüßungsbildschirm ausgeblendet wird, vergessen Sie nicht, in den Optionen der Zielstatusleiste " Während des Anwendungsstarts ausblenden " zu markieren . Sie können auch " Statusleiste ist anfangs ausgeblendet " zu " JA " auf der Liste hinzufügen, wenn Sie dies nicht mit Code in der App tun möchten.

Idan
quelle
2
Ich habe viel Zeit gebraucht, um das herauszufinden. Es ist ein Problem, von dem ich denke, dass es jeder hätte, und Apple hat es nicht genug erwähnt. froh zu helfen ...
Idan
7
funktioniert einwandfrei, vergessen Sie nicht, den .plist-Wert für "Statusleiste ist anfangs ausgeblendet" auf YES zu setzen.
Andreas-Supersmart
1
Wow, das war das einzige, was mit Kobold2d 2.1.0 und iOS 7 funktioniert hat, vielen Dank!
Binarian
5
Apple ist kein wirklicher Verfechter der Abwärtskompatibilität. Lassen Sie uns alle zu ihrer Flöte tanzen und jede einzelne unserer Apps aktualisieren. Entschuldigung, Frustration ablassen. Verursacht von Apple.
Henrik Erlandsson
1
Endlich funktioniert es bei mir. Weil - (BOOL) die Statusbarhidden-Methode bevorzugt, die in der Modellansicht nicht funktioniert.
utkal patel
73

Der von Ihnen veröffentlichte Code funktioniert für iOS 6.1 und niedriger. Für iOS 7 hat Apple neue Methoden zur Verfügung gestellt, mit denen die Statusleiste für jede Ansicht direkt gesteuert werden kann. Wenn Sie diese Option in Ihrer Info.plist deaktivieren , können Sie die Statusleiste zumindest für die aktuelle Entwicklervorschau ausblenden (4).

Fügen Sie dies hinzu und setzen Sie auf NEIN

Weitere Informationen finden Sie im iOS 7-Übergangshandbuch, das auf dem Entwicklerportal von Apple verfügbar ist.

Sven
quelle
3
Meiner Meinung nach ist diese Antwort besser, da ich in meiner App die Statusleiste nur im Querformat ausblenden möchte, danke!
Sohn Nguyen
danke das hilft mir da ich es für meine gesamte app verstecken will
kevinl
2
Meiner Meinung nach sollte diese Antwort die beste Antwort sein -> Sie wird hier erklärt. Developer.apple.com/library/prerelease/ios/documentation/…
marceloquinta
5
Ich habe dies getan, aber es sieht so aus, als hätte es gerade die Statusleiste ausgeblendet. Meine App wird jedoch immer noch durch den Platz, den die Statusleiste einnehmen würde, nach unten gedrückt, und ich kann immer noch die Batterieanzeige sehen!
Vedran
36

Nun, ich versuche, die Statusleiste in meiner gesamten App und in der "app" -info.plist auszublenden und füge zwei Zeilen im Wörterbuch "Information Property List" hinzu. Ich füge "View controller-based status bar display" hinzu. set NO and in Statusleiste ist zunächst ausgeblendet "JA setzen und bei mir funktioniert n_n '

plist info

user_Dennis_Mostajo
quelle
2
Dies zwingt Ihre App in einen Kompatibilitätsmodus, der ausschließlich dafür ausgelegt ist, dass alte Apps unter iOS 7 wie vorgesehen ausgeführt werden, wenn Entwickler keine Zeit haben, die App für die neue Vorgehensweise zu reparieren. Stattdessen müssen Sie die Preferred * -Methoden in Ihren View Controllern implementieren.
lhunath
17

Wenn Sie jedoch UIImagePicker verwenden, wird die Statusleiste erneut angezeigt.

In diesem Fall sollten Sie die Statusleiste wie folgt ausblenden:

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

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

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
allein
quelle
2
Ich habe das gleiche Problem. Die Statusleiste wird ausgeblendet, bis ich UIImagePicker verwende. Ich habe Ihre Lösung ausprobiert und sie funktioniert bei mir nicht. Musste ich außer dem Code in Ihrem Beitrag noch etwas hinzufügen?
Dev01
@WootWoot Ich habe auch hinzugefügt - (BOOL) bevorzugtStatusBarHidden {return YES; }, um Controller anzuzeigen. Versuch es bitte.
Alleine
scheint bei mir nicht zu funktionieren .. solltest du eigentlich anrufen setNeedsStatusBarAppearanceUpdate?
RyanM
Ich muss die Statusleiste bei einem Klick auf die Schaltfläche ausblenden. Ich habe unten Code versucht, aber es hat nicht funktioniert. Kann mir bitte jemand helfen? [[UIApplication sharedApplication] setStatusBarHidden: YES];
Janitheshan
8

Nach langem Suchen habe ich endlich eine sehr einfache Lösung gefunden, die sich auch um das kümmert UIImagePickerController Problem .

Setzen Sie, wie in den anderen Antworten erwähnt, Ihre Statusleiste in AppDelegate didFinishLaunching ein und setzen Sie das "Erscheinungsbild der Controller-basierten Statusleiste anzeigen" auf NO.

Dann in Ihrem AppDelegate:

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

et voila - Ihre Statusleiste bleibt auch dann ausgeblendet, wenn der UIImagePickerController an erster Stelle steht.

Dies ist besser, als es jedes Mal neu zu erstellen, wenn Sie einen UIImagePickerController präsentieren, da er in der gesamten App verborgen bleibt.

ikuramedia
quelle
2
Obwohl in iOS7 zumindest auf dem iPad immer noch etwas kaputt zu sein scheint - der UIImagePickerController wirft beim zweiten Anzeigen immer noch eine Statusleiste auf ... Hurrrr ... :-( Derzeit verwende ich das appDelegate und verstecke es in jedem viewWillAppear erneut Selbst wenn es für kurze Zeit schmutzig aussieht, wird es schnell wieder
repariert
1
Dies ist die einzige Methode, die für mich unter iOS8 funktioniert hat ... irgendwie wird bevorzugt, dass StatusBarHidden auf meinem View Controller nicht aufgerufen wird.
Mojuba
7

Fügen Sie einfach Folgendes hinzu, um die Statusleiste auf einem bestimmten UIViewController auszublenden:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Hoffe das hilft !

Mike Gledhill
quelle
!! Dies ist die Lösung, die in iOS 9.2 für mich funktioniert hat. Das Ändern der Plist hatte keine Auswirkungen.
Mico
5

Sie können sich vor der Projektzusammenfassung verstecken. Während des Starts wird ein Kontrollkästchen ausgeblendet.

Siehe den Schnappschuss

Geben Sie hier die Bildbeschreibung ein

sohail.hussain.dyn
quelle
4

Ich habe diese Lösung für mich gefunden. Es wirkt wie ein Zauber. Schreiben Sie diesen Code auf Ihren Viewcontroller, auf dem Sie UIImagePickerController verwenden möchten.

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

Stellen Sie sicher, dass Sie zusätzlich zu der Antwort von oben allein die imagePickerControllerDidCancel-Methode implementieren und dort denselben Code hinzufügen.

Schwindler
quelle
2

Ich hatte auch Probleme mit UIImagePicker. Ähnlich wie bei Alones Antwort war meine Lösung die folgende. Ich habe diese Zeile oder diesen Code hinzugefügt:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

zu dieser Funktion:

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

Ich habe dies nicht mit iOS 6 oder älter getestet, aber es funktioniert hervorragend in iOS 7.

Dev01
quelle
2

Schnelle Lösung

Fügen Sie dies einfach Ihren View Controllern hinzu:

override func prefersStatusBarHidden() -> Bool {
    return true
}
Dan Beaulieu
quelle
0

Ich verwende Xcode 6, diese Lösung funktioniert für mich unter iOS 7 und 8:

Setzen Sie zunächst in der Plist-Datei "Erscheinungsbild der Controller-basierten Statusleiste anzeigen" auf "NEIN".

Zweitens fügen Sie in AppDelegate Folgendes hinzu:

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

Mein Problem war, dass ich View Controller Containment verwendet habe. Nur der oberste Ansichtscontroller, der beispielsweise in einen Navigationscontroller eingebettet ist, kann die Statusleiste ausblenden oder anzeigen.

testen
quelle