Die Statusleiste in iOS7 kann nicht ausgeblendet werden

267

Ich habe gerade mein iPhone 5 iOS 7 auf vier Beta-Versionen aktualisiert. Wenn ich jetzt meine App von Xcode 5 auf diesem iPhone aus starte, wird die Statusleiste nicht ausgeblendet, obwohl dies der Fall sein sollte.

Funktioniert nicht:

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

Funktioniert nicht:

[UIApplication sharedApplication].statusBarHidden = YES;

Ich kann mich nicht in Apple Developer Forums anmelden

Melih Büyükbayram
quelle
15
Unwahr, meine Antwort betraf Xcode und das wurde der Öffentlichkeit gezeigt. Es ist zu allgemein zu sagen, "wenn Sie darauf antworten, ist es ein Verstoß gegen die NDA". Lassen Sie die Entwickler das selbst entscheiden ;-)
Jake
mögliches Duplikat der
Statusleiste
Wie verstecke ich die Statusleiste programmgesteuert in einem bestimmten ViewController?
Bhavik

Antworten:

558

Fügen Sie in der Plist-Datei Ihrer Apps eine Zeile hinzu, die als "Controller-basiertes Erscheinungsbild der Statusleiste anzeigen" bezeichnet wird, und setzen Sie sie auf "NEIN"

Beachten Sie, dass dies einfach nicht funktioniert, wenn Sie UIImagePickerController in der App verwenden.

von http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , der Lösung von mgiroux

Ein Beispiel zum Hinzufügen von View Base Controller zu Ihren Info-Einstellungen in Xcode

Satgi
quelle
3
Tolle! Ich verschwende Stunden damit! Danke dir!
Idan
12
Als Referenz wird der in der eigentlichen Datei Info.plist gespeicherte Rohwert aufgerufen UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield
55
Das einzige Problem bei diesem Ansatz besteht darin, dass bei Verwendung von UIImagePickerController zur Auswahl von Bildern die Statusleiste erneut angezeigt wird. Die einzige sichere Möglichkeit, dies zu verhindern, besteht darin, die Methode prefersStatusBarHidden in jedem Ihrer Ansichtscontroller zu implementieren und die UIViewControllerBasedStatusBarAppearance zurückzusetzen plist Einstellung wahr zu sein.
Jason Fuerstenberg
5
Ich weiß wirklich nicht, warum Apple das geändert hat! Danke :)
Mohamed Amine
18
Sie müssen auch Status bar is initially hiddenauf JA setzen .
Zorayr
277

Fügen Sie eine Methode in Ihrem View Controller hinzu.

- (BOOL)prefersStatusBarHidden {
    return YES;
}
invoodoo
quelle
35
Für alle, die suchen, ist dies die Möglichkeit, wenn Sie die Statusleiste in bestimmten Ansichten dynamisch entfernen möchten. Diese Methode funktioniert unabhängig davon, auf was Sie in Ihrer Liste "Aussehen der Controller-basierten Statusleiste anzeigen" eingestellt haben!
Herr T
2
+1 b / c Ich suche die Möglichkeit, die Statusleiste dynamisch ein- / auszublenden. Die Methode zur Einstellung der P-Liste (siehe Beitrag von @Satgi oben) ist jedoch der beste Weg, um die Statusleiste global anzuzeigen / auszublenden.
JonnyB
Wenn Sie irgendwo eine Fotogalerie haben, möchten Sie die Steuerelemente normalerweise nur dort ausblenden, und Sie können sie auch ein- und ausschalten. Das funktioniert bei mir nicht, die Funktion wird nicht einmal aufgerufen. Ich habe an der gleichen Stelle einen bevorzugten
StatusBarStyle
4
@ Mr.T In iOS 8 scheint dies nicht mehr der Fall zu sein. Wenn Sie das Erscheinungsbild der auf der Ansichtssteuerung basierenden Statusleiste auf NEIN gesetzt haben und prefersStatusBarHiddenin einer Ansichtssteuerung true zurückgeben , funktioniert dies nicht. Die Statusleiste wird weiterhin angezeigt.
Isuru
1
@Isuru warum hast du auf NO gesetzt? Wenn Sie auf JA setzen, wird jeder View Controller gefragt, in einem anderen Fall natürlich nicht.
Invoodoo
84

Fügen Sie in der Liste die folgenden Eigenschaften hinzu.

-> Status bar is initially hidden= JA

-> View controller-based status bar appearance= NEIN

Fügen Sie beide hinzu - jetzt verschwindet die Statusleiste.

user1179912
quelle
Ja, das hat auch bei mir funktioniert. Ohne die Option "Statusleiste ist anfangs ausgeblendet" auf JA zu setzen, funktioniert sie nicht wie erwartet. Vielen Dank.
AndrewShmig
53

Um die Statusleiste in einer Einzelansicht auszublenden, sollten Sie Folgendes verwenden:

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

Zuerst hat dies bei mir nicht funktioniert, und dann hat eine Säge in der Dokumentation dieser Methode Folgendes angegeben: // Das Festlegen von statusBarHidden führt zu nichts, wenn Ihre Anwendung das standardmäßige UIViewController-basierte Statusleistensystem verwendet.

Dies muss in der plist-Datei erfolgen, wobei der Schlüsselsatz View controller-based status bar appearancezu hinzugefügt wird NO. Und dann hat es funktioniert.

Debora Fortini
quelle
16

Um die alte UIApplication-Methode zum Ausblenden / Anzeigen der Statusleiste zu verwenden, muss Ihre App einen Plist-Wert für iOS 7 festlegen:

View-Controller Based Status Bar Appearance = NO

Dieser Wert ist standardmäßig auf YES gesetzt. Wenn Sie es in NO ändern, können Sie die Legacy-Methoden verwenden. Wenn Sie YES beibehalten, können Sie die Statusleiste weiterhin ausblenden. Es liegt jedoch an jeder View Controller-Unterklasse in Ihrer App, diese zu überschreiben: prefersStatusBarHiddenYES zurückzugeben.

Jedes Mal, wenn Ihre App das Erscheinungsbild oder die Sichtbarkeit der Statusleiste zum Ändern benötigt und das Erscheinungsbild der View-Controller-basierten Statusleiste auf JA gesetzt ist, muss Ihr äußerster View Controller Folgendes aufrufen:

setNeedsStatusBarAppearanceUpdateAnimation

jaredsinclair
quelle
Ich musste mich in den benutzerdefinierten iOS-
Zieleigenschaften
16

Um die Statusleiste in iOS7 auszublenden, benötigen Sie 2 Codezeilen

  1. Anwendung: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsschreiben

    [application setStatusBarHidden:YES];
  2. in info.plist füge dies hinzu

    View-Controller Based Status Bar Appearance = NO
Shaik Riyaz
quelle
2
Nur um dies zu bereinigen, wenn Sie dies in didFinishLaunching setzen, können Sie einfach schreiben [application setStatusBarHidden:YES];oderapplication.statusBarHidden = YES;
joel.d
Die Antwort oben enthält möglicherweise einen Tippfehler. "Darstellung der Statusleiste auf Basis des View-Controllers = NEIN" funktionierte bei mir nicht, aber "Darstellung der Statusleiste auf der Basis des View-Controllers = NEIN" funktionierte.
tmr
11

Es werden so viele Kombinationen für dieses Problem vorgeschlagen, aber das Problem ist, dass iOS 6 und 7 unterschiedliche Methoden verwenden, um die Statusleiste auszublenden. Ich habe die Plist-Einstellungen noch nie erfolgreich festgelegt, um das Verhalten im iOS6-Stil unter iOS 7 zu aktivieren. Wenn Sie jedoch Ihre App für die Unterstützung von iOS 6+ erstellen, müssen Sie drei Methoden gleichzeitig verwenden, um sicherzustellen, dass ein bestimmter Ansichts-Controller den Status verbirgt 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];
}

Dies sollte unabhängig von Ihren Plist-Einstellungen funktionieren.

Salzige Nüsse
quelle
7

Ich musste beide Änderungen unten vornehmen, um die Statusleiste auszublenden:

Fügen Sie diesen Code dem Ansichts-Controller hinzu, in dem Sie die Statusleiste ausblenden möchten:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Fügen Sie dies Ihrer .plist-Datei hinzu (gehen Sie in Ihren Anwendungseinstellungen zu 'info').

View controller-based status bar appearance --- NO

Dann können Sie diese Zeile aufrufen, um die Statusleiste auszublenden:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Peter Y.
quelle
6

Fügen Sie einfach diese 2 Zeilen in die Datei info.plist ein. Es wird das Update für iOS7 und ältere Versionen sowohl machen.

  • Die Statusleiste ist anfangs ausgeblendet = JA
  • Anzeigen der Controller-basierten Statusleiste = NEIN

Navigieren Sie zum Projekt und wählen Sie Ziele -> Allgemein. Das Kontrollkästchen "Statusleistenstil ... Während des Anwendungsstarts ausblenden" wird aktiviert. Das wird funktionieren.

Sid
quelle
6

Versuchen Sie diese einfache Methode:

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

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

Das einzige, was für mich funktioniert hat, ist, Folgendes in Ihre Liste aufzunehmen

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
bartburkhardt
quelle
4

Die einfachste Methode , die ich für das Ausblenden der Statusleiste in der gesamten App gefunden haben , ist durch eine Erstellung categoryauf UIViewControllerund überschreiben prefersStatusBarHidden. Auf diese Weise müssen Sie diese Methode nicht in jeden einzelnen View-Controller schreiben.

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
Mike
quelle
die beste echte, iOS7, nicht gefälschte Lösung, großartig
Fattie
3
  1. In der Liste hinzufügen ----

    Anzeigen der Controller-basierten Statusleiste --- NEIN

  2. In jeden viewController schreiben

    - (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
    }

Bei Statusleistenproblemen in iOS 7 sollte das Ziel für die App jedoch 5.1 und höher sein

Maulik
quelle
3

Viele der Antworten in diesem Thread funktionieren, aber ich verstehe, wenn Sie versuchen, etwas Dynamisches zu tun, müssen Sie eventuell Folgendes aufrufen:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
dunkelherziges Gefühl
quelle
3

Schritte zum Ausblenden der Statusleiste in iOS 7:

1.Gehen Sie zu Ihrer Anwendungsinfo.plist-Datei.

2.Und Set, View Controller-basiertes Statusleisten-Erscheinungsbild: Boolean NO

Hoffe, ich habe das Problem mit der Statusleiste gelöst .....

Chandrika
quelle
3

Verwenden Sie für iOS 7 in einer einzelnen Ansicht die Methode viewWillappear:

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

Zur Anzeige der Statusleiste verwenden Sie:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
Oscar Castellon
quelle
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
Thunderbird
quelle
2

In der Info Plist-Datei Fügen Sie eine Zeile für die folgende Eigenschaft hinzu

Eigenschaftsname: Anzeigen der Controller-basierten Statusleiste

Wert: NEIN

user842553
quelle
1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
Bhoopi
quelle
1

Ich habe alle diese Optionen ausprobiert, die hier in meinem Projekt veröffentlicht wurden, und sie würden nicht funktionieren. Ich dachte, es könnte damit zusammenhängen, dass ich meine Xcodeund dann die App auf iOS 7 aktualisiert hatte und einige Einstellungen irgendwo durcheinander geraten waren. Ich entschied mich, ein komplett neues Projekt dafür zu erstellen und nach einfachem Setzen von " Status bar is initially hidden = YES" und " View controller-based status bar appearance = NO", wie von vielen anderen angegeben, funktionierte es korrekt (dh keine Statusleiste).

Wenn Sie also an einem Projekt arbeiten, das von einer alten Version auf iOS 7 aktualisiert wurde und alle anderen Optionen ausprobiert hat, sollten Sie ein neues Projekt erstellen.

user1529408
quelle
Ich habe dieselbe Technik verwendet, um zunächst zu bestätigen, dass ich die Statusleiste für jeden Bildschirm global ausblenden kann. Da meine App jedoch ziemlich "zeitorientiert" ist, wollte ich die Zeitanzeige für die meisten Bildschirme. Es ist nur ein Bildschirm, den ich aus verschiedenen Gründen ausschließen wollte. Am Ende habe ich das Gegenteil Ihrer Parameter verwendet: anfangs versteckt = NEIN & VC-basiertes Erscheinungsbild der Statusleiste = JA. Dann musste ich die (BOOL) prefersStatusBarHidden-Methode (Rückgabe von YES) in die eine VC einfügen, in der ich sie verstecken wollte. Funktioniert gut. Ich sollte hinzufügen, dass meine App aus anderen Gründen nur iOS7 ist.
Bobsmells
1

Für 2019 ...

Um eine App ohne Statusleisten zu erstellen,

Klicken Sie auf info.plist und klicken Sie mit der rechten Maustaste auf "Zeile hinzufügen".

Fügen Sie diese beiden mit diesen Einstellungen hinzu:

Geben Sie hier die Bildbeschreibung ein

Das ist alles dazu.

Fattie
quelle
0

Für Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
Irshad Qureshi
quelle
0

So blenden Sie die Statusleiste für einen bestimmten viewController aus

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Zum Einstellen der Statusleiste Für die Anwendung ausgeblendet:

  • Satz View controller-based status bar appearancean NOin .plist und in der application: didFinishLaunchingWithOptions:Serie: [application setStatusBarHidden:YES];

    Hinweis: setStatusBarHidden: veraltet

ODER

  • in Projekteinstellungen -> Registerkarte Allgemein -> Bereitstellungsinformationen

    Kontrollkästchen Hide Status bar.

Lal Krishna
quelle
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Evan Ische
quelle
In der Frage wird ausdrücklich erwähnt, dass dieser Ansatz nicht funktioniert. Bitte lesen Sie die Frage sorgfältig durch, bevor Sie sie beantworten.
Borys Verebskyi
Solange das Erscheinungsbild der View Controller-basierten Statusleiste auf NO gesetzt ist, ist dies der sauberste Ansatz.
Evan Ische
-7

Ich bin mir nicht sicher, warum Sie sich "nicht in den Apple Developer Forums anmelden können", aber (ohne die NDA zu verletzen) können Sie Ihre statusBar auch über Xcode ausblenden. Dies ist eine allgemeine Einstellung für Ihr Anwendungsziel.Geben Sie hier die Bildbeschreibung ein

Jake
quelle
Nein, funktioniert wie ein Zauber. Die Foren sind schon eine Weile geöffnet.
Jake