Statusleiste ausblenden In der iOS 8 App

74

Ich habe versucht

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

Das macht nichts.

Und ich habe in meiner Info.plistDatei nach "Aussehen der Controller-basierten Statusleiste anzeigen" gesucht, aber sie ist nicht vorhanden.

Wie kann ich die weiße Statusleiste oben auf dem Bildschirm (mit Uhr und Akkuladung) in meiner App für Xcode 6 ausblenden? Vielen Dank!

Aggressor
quelle
4
Sie können Info.plist nach Bedarf hinzufügen. Außerdem schlage ich vor, in SO und Google zu suchen. Dies wurde viel gefragt und beantwortet. Sie müssen wissen, wie Sie bald nach Antworten auf komplexere Probleme suchen können. Beginnen Sie besser jetzt.
Djromero
2
Gültige Kritik, danke.
Aggressor
2
Nur ein Vorschlag @djromero - wenn wir Benutzer davon abhalten, neue Versionen alter Fragen zu veröffentlichen, werden die Antworten alt - sollten wir diese nicht fördern? Dies bedeutet auch, dass die Neuankömmlinge, die diese Fragen beantworten, Kredit erhalten und das gesamte System am Leben bleibt.
Amergin
@amergin Eine doppelte Frage ist in keiner Weise frisch. Für Neulinge gibt es jeden Tag viele Fragen. Ich erinnere mich nicht genau an ein Jahr später , aber in diesem Moment war es offensichtlich, dass die Frage bereits in SO beantwortet wurde. Tatsächlich hat sich das OP bei mir bedankt, daher weiß ich nicht, worum es Ihnen geht.
Djromero
1
@amergin Ich nehme es nicht als Kritik. Ich möchte nur, dass Sie meinen Standpunkt verstehen: Eine Frage kann nicht frisch sein, sondern nur anders. Doppelte Fragen erschweren die spätere Suche. Ein Vorschlag oder Kritiker, den Sie mir machen können: Warum haben Sie nicht dafür gestimmt, ihn als Dup zu schließen? Ich erinnere mich nicht.
Djromero

Antworten:

173

Sie müssen diese Methode auf jedem View Controller überschreiben, es sei denn, Sie haben diesen Plist-Eintrag.

Ziel c

-(BOOL)prefersStatusBarHidden{
    return YES;
}

Swift 2

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

Swift 3+

override var prefersStatusBarHidden: Bool {
    return true
}

Und vergessen Sie nicht festzulegen (wenn Sie einen View-Controller durch Aufrufen der Methode presentViewController präsentieren: animiert: Vervollständigung: Methode):

Ziel c

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = YES;

Schnell

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = true

Dokumentation: https://developer.apple.com/reference/uikit/uiviewcontroller/1621453-modalpresentationcapturesstatusb

Wenn Sie die Statusleiste in einem Container-View-Controller ändern (z. B. UINavigationControlleroder UIViewControllermit untergeordneten View-Controllern) und den für die Statusleiste verantwortlichen View-Controller ändern möchten, sollten Sie die childViewControllerForStatusBarHidden:Eigenschaft verwenden. Z.B:

Legen Sie die First View Controller-Instanz fest, die immer für die Verwaltung der Statusleiste verantwortlich ist

Ziel c

- (UIViewController *)childViewControllerForStatusBarHidden {
    return childViewControllers.first; // or viewControllers.first
}

Swift 2

override var childViewControllerForStatusBarHidden() -> UIViewController? {
    return childViewControllers.first // or viewControllers.first
}

Swift 3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return childViewControllers.first // or viewControllers.first
}

Legen Sie den Container View Controller fest, der für die Verwaltung der Statusleiste verantwortlich ist

Ziel c

- (UIViewController *)childViewControllerForStatusBarHidden {
    return nil;
}

Swift 2

override func childViewControllerForStatusBarHidden() -> UIViewController? {
    return nil
}

Swift 3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return nil
}

Dokumentation: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621451-childviewcontrollerforstatusbarh

VaporwareWolf
quelle
Gibt es eine Möglichkeit, dies global zu tun, vielleicht eine Code-Pause in Appdelegate?
CaffeineShots
Ja, erstellen Sie Ihren eigenen UIViewController und erben Sie ihn.
VaporwareWolf
Vergessen Sie nicht anzurufen, setNeedsStatusBarAppearanceUpdatewenn Sie es zwingen müssen, den aktuellen Viewcontroller zu einer beliebigen Zeit zu aktualisieren
Albert Renshaw
121
  1. Gehen Sie zur Datei Info.plist
  2. Bewegen Sie den Mauszeiger über eine dieser Zeilen, und die Tasten (+) und (-) werden angezeigt.
  3. Klicken Sie auf das Pluszeichen, um einen neuen Schlüssel hinzuzufügen
  4. Geben Sie Start mit Großbuchstaben V ein. Die erste Wahl ist automatisch das Erscheinungsbild der Controller-basierten Statusleiste . Fügen Sie das als SCHLÜSSEL hinzu.
  5. Stellen Sie den Wert auf "NEIN".
  6. Gehen Sie zu AppDelegate.m für Objective-C ( für schnelle Sprache: AppDelegate.swift )
  7. Fügen Sie den Code innerhalb der Methode hinzu

Für Ziel-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application setStatusBarHidden:YES];

    return YES;
}

Für Swift:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey:Any]?) -> Bool {
    application.statusBarHidden = true

    return true
}

Erledigt! Führen Sie Ihre App und keine Statusleiste mehr aus!

Nycdanie
quelle
2
Vielen Dank, das ist das erste Mal, dass ich jemanden gefunden habe, der das gut erklärt, und es macht tatsächlich Sinn
Karl Humphries
7
Nur die ersten 5 Schritte reichen aus, wenn Sie info.plist einen weiteren Schlüssel hinzugefügt haben. Fügen Sie diesen Schlüssel hinzu = "Statusleiste ist anfangs ausgeblendet" mit Wert = "Ja"
Mehul Thakkar
Vielen Dank für !!!, nur ein kleiner Vorschlag - Sie müssen nicht in der appDelegate-Datei codieren, sondern in Ihren XCode-Zieleinstellungen die Option Statusleiste ausblenden auswählen. Plist-Änderungen gelten weiterhin. Viel Spaß beim Codieren !!!
Ashwin G
27

Sie können die Statusleiste ausblenden, ohne eine einzige Codezeile zu schreiben. Es sind lediglich zwei Einträge in die info.plist erforderlich. Die erste ist

"Aussehen der Controller-basierten Statusleiste anzeigen" auf NO gesetzt

der zweite ist

"Statusleiste ist anfangs ausgeblendet" auf JA gesetzt

CSJordan
quelle
Das Anzeigen der Controller-basierten Statusleiste hat den Job erledigt!
Makalele
11

Sie können diese Zeile zu Ihrer Info.plist-Datei hinzufügen, wenn sie nicht vorhanden ist. Gehen Sie einfach in Xcode zum Projekt, gehen Sie zum Abschnitt "Info" und bewegen Sie den Mauszeiger über eine der vorhandenen Zeilen. Es sollte eine "+" - Schaltfläche angezeigt werden, mit der Sie eine Zeile hinzufügen und "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" eingeben können.

Nerrolken
quelle
Vielen Dank für den Tipp, ich habe die obige Antwort verwendet, aber das ist schön zu wissen, wie es funktioniert! Sehr geschätzt
Aggressor
Diese Antwort benötigt für iOS 9.
Beto
9

Für iOS 10 mit Swift 3 sollten Sie Folgendes verwenden:

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}
Ramon Vasconcelos
quelle
1
In der Tat funktioniert dies mit iOS 10. Ich bevorzuge die Kurzversion "override var prefersStatusBarHidden: Bool {return true}"
Calin Chitu
3
  1. Öffnen Sie info.plist
  2. "Aussehen der Controller-basierten Statusleiste anzeigen" auf NO gesetzt
  3. "Statusleiste ist anfangs ausgeblendet" auf JA gesetzt
  4. Erledigt

Keine Notwendigkeit, eine Codezeile zu schreiben ... Prost

Emraz
quelle
-4

Wenn Sie UIDocumentInteractionController verwenden, um Daten anzuzeigen, wird die Statusleiste nie ausgeblendet, sodass ich eine Alternative dazu habe

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Diese Zeile ändert die Farbe des Inhalts der Statusleiste in Weiß

Prüfer
quelle