UIStatusBarStyle PreferredStatusBarStyle funktioniert nicht unter iOS 7

110

In meinem iPhone - Anwendung mit Xcode 5 für iOS 7 I gebaut Satz UIViewControllerBasedStatusBarAppearance=YESin info.plist, und in meinem ViewControllerIch habe diesen Code:

-(UIStatusBarStyle) preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

Die Statusleiste ist jedoch vor dem schwarzen Hintergrund immer noch schwarz.

Ich weiß , seine möglichen diese App weit um die Einstellung zu ändern UIViewControllerBasedStatusBarAppearance=NOin info.plist, aber ich brauche eigentlich diese auf einem verändern , viewControllerindem viewControllerzum Laufzeit - Basis.

Andrew Smith
quelle
Hallo, ich habe das gleiche Problem wie Sie in Frage gestellt. Hast du die Lösung bekommen? Bitte geben Sie mir das.
Noundla Sandeep
Sie können einen Blick darauf werfen: Ändern der
Textfarbe der

Antworten:

281

Ich habe festgestellt, dass, wenn sich Ihr ViewController in einem Navigationscontroller befindet, der Navigationscontroller navigationBar.barStyleden statusBarStyle bestimmt.

Wenn Sie die Navigationsleiste barStyleauf UIBarStyleBlackTranslucenteinstellen, wird ein weißer Statusleisten-Text (dh UIStatusBarStyleLightContent) und UIBarStyleDefaultein schwarzer Statusleisten-Text (dh UIStatusBarStyleDefault) angezeigt .

Beachten Sie, dass dies auch dann gilt, wenn Sie die Farbe der Navigationsleiste über ihre vollständig ändern barTintColor.

mxcl
quelle
Das macht Sinn für mich ... großartig
Nick
14
Ich glaube, das liegt daran, dass der UINavigationController's preferredStatusBarStyleden von ihm gehosteten ViewController nicht aufruft und stattdessen nur basierend auf seinem Navigationsbereich zurückgibt.
mxcl
In diesem Fall befindet sich die Ansicht nicht in einem Navigationscontroller.
Andrew Smith
Sehr uninteressant zu glauben, dass der Balkenstil einer im Ansichts-Controller implementierten Methode den Vorzug gibt, und zwar nur bei der Darstellung modaler Ansichten!
Matej
3
UIBarStyleBlackTranslucent ist veraltet, verwenden Sie UIBarStyleBlackstattdessen
Nhon Nguyen
87

OK, hier ist der Trick. Sie müssen den Schlüssel "Controller-basierte Statusleiste anzeigen" hinzufügen und den Wert auf "Nein" setzen.

Dies steht im Widerspruch zu der Bedeutung dieses Schlüssels. Selbst wenn Sie den Wert auf festlegen No, können Sie das Erscheinungsbild der Statusleiste und die Anzeige in einem Ansichts-Controller ändern. Es verhält sich also wie "Ja", aber setzen Sie es auf "Nein"!

Jetzt kann ich die Statusleiste weiß oder dunkel bekommen.

Andrew Smith
quelle
6
Für mich war das falsch. Der Schlüssel musste erwartungsgemäß auf "Ja" gesetzt werden. Ich bin auf Xcode 5.1 iOS 7.1, also hat es sich vielleicht geändert.
joel.d
Ich benutze auch Xcode 5.1 und iOS 7.1 und NO hat bei mir funktioniert ... SELTSAM.
Arjun Mehta
Wo soll ich diesen Schlüssel hinzufügen?
Hadu
In Ihrer [AppName] -Info.plist-Datei
Saren Inden
1
Es funktioniert gut, wenn die Taste "View controller-based status bar" mit Xcode6.0, iOS 8.0
bpolat
77

Für preferredStatusBarStyle()an die Arbeit innerhalb UINavigationControllerund UITabBarControllerich fügen Sie den folgenden Code, der die bevorzugte Statusleiste Stil aus dem aktuell sichtbaren View - Controller erhalten.

extension UITabBarController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return visibleViewController
    }
}

Für Swift 3 sind dies keine Methoden, sondern Eigenschaften:

extension UITabBarController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

Die Swift 4.2- Eigenschaften wurden umbenannt:

extension UITabBarController {
   open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
   open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

Verwendung

class ViewController: UIViewController {

    // This will be called every time the ViewController appears
    // Works great for pushing & popping
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

}
Daniel Wood
quelle
6
Dies ist bei weitem die beste Antwort (Für Apps, die UINavigationController oder UITabBarController verwenden
Kesava
1
Was ist die Verwendung dafür?
AnBisw
@Annjawn Diese Methoden werden von UIKit verwendet. Sie müssen nichts anderes tun, als es Ihrem Projekt hinzuzufügen.
Daniel Wood
@ DanielWood Ja, ich habe das herausgefunden und völlig vergessen, dass ich genau dasselbe in einem meiner vorherigen Projekte verwendet habe, wenn auch etwas anders.
AnBisw
Dies ist in der Tat die beste Antwort
Musa Almatri
33

Ich komme vielleicht etwas spät dazu, aber falls jemand anderes nach einer funktionierenden und verifizierten App-weiten Lösung sucht.

@mxcl beschreibt korrekt, warum dies geschieht. Um dies zu korrigieren, erstellen wir einfach eine Erweiterung (oder Kategorie in obj-c), die die PreferredSatusBarStyle () -Methode von UINavigationController überschreibt. Hier ist ein Beispiel in Swift:

extension UINavigationController {
    public override func preferredStatusBarStyle() -> UIStatusBarStyle {
        if let rootViewController = self.viewControllers.first {
            return rootViewController.preferredStatusBarStyle()
        }
        return super.preferredStatusBarStyle()
    }
}

Dieser Code extrahiert einfach den ersten View-Controller (den Root-View-Controller) und packt ihn aus (in obj-c überprüfen Sie einfach, ob er nicht Null ist). Wenn das Entpacken erfolgreich ist (nicht Null), greifen wir auf den RootViewController PreferredStatusBarStyle zu. Andernfalls geben wir nur die Standardeinstellung zurück.

Hoffe das hilft jedem, der es braucht.

Kyle Begeman
quelle
2
In Swift 2.0 müssen Sie "as? UIViewController" aus der Bedingungsanweisung entfernen.
Thomás Calmon
Genial, ich habe eine Änderung vorgenommen und zusätzlich die Anweisung "as" entfernt. Ich habe sie auf diese Weise von "first" in "last" geändert. Auf diese Weise kann der View Controller, den der Benutzer oben im Stapel sieht, gesteuert werden die Farbe der Statusleiste. Tolle Arbeit, danke fürs Teilen!
Unome
1
Wenn Ihr Navigationscontroller keine Ansichtscontroller hat, würde dies eine Endlosschleife verursachen. return self.preferredStatusBarStyle()würde in genau dieselbe Methode zurückrufen.
BearMountain
1
In meinem Fall habe ich anstelle des rootViewControllers den topViewController verwendet, da sich der Stil während des Stapels ändern kann.
Ric Santos
2
@ Unome visibleViewControllerwäre noch besser
Cœur
21

Fügen Sie die folgende Zeile in die didFinishLaunchingWithOptions:Methode Ihres App-Delegaten ein , um mehr Details in die akzeptierte Antwort aufzunehmen :

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

Fügen Sie dann in Ihrer Info.plist diese hinzu View controller-based status bar appearanceund setzen Sie sie auf NO.

Ich glaube, so sollte es gemacht werden, NICHT vom Navigationscontroller, wenn Sie die gleiche Statusleistenfarbe für die gesamte App wünschen. Möglicherweise haben Sie Bildschirme, die nicht unbedingt in eine UINavigationControlleroder eine andere UINavigationControllerUnterklasse eingebettet sind , und andere Dinge.

BEARBEITEN : Sie können dies auch tun, ohne Code einzugeben : https://stackoverflow.com/a/18732865/855680

Matthew Quiros
quelle
1
Beachten Sie, dass dieser Weg von IOS 9.0
Mohamed Salah
10

In viewDidLoad schreiben Sie dies einfach

[self setNeedsStatusBarAppearanceUpdate];

Tu das einfach und es wird funktionieren

Kannst du das bitte versuchen?

Set UIViewControllerBasedStatusBarAppearance to NO.
Call [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Eine weitere Sache, die ich in Ihrer Frage gesehen habe, ist, dass Sie die Methode so geschrieben haben

 -(void)UIStatusBarStyle PreferredStatusBarStyle ()
        {
            return UIStatusBarStyle.LightContent;
        }

aber es sollte so sein

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 
Benutzer 1531343
quelle
Dies führt dazu, dass die PreferredStatusBarStyle-Methode aufgerufen wird, die Statusleiste jedoch weiterhin schwarz ist.
Andrew Smith
Bitte sehen Sie meine aktualisierte Antwort. Lassen Sie mich schnell wissen, ob das funktioniert oder nicht
Benutzer 1531343
Meine ursprüngliche Frage besagt ausdrücklich, dass ich die Statusleiste von Ansicht zu Ansicht steuern muss.
Andrew Smith
Kannst du bitte deinen Code anhand meiner aktualisierten Frage überprüfen?
Benutzer 1531343
1
[self setNeedsStatusBarAppearanceUpdate];so eine tolle Methode, danke!
Supertecnoboff
6

Hier ist, wie ich es gelöst habe. Normalerweise entscheiden der Navigationscontroller oder der tabBarController über das Erscheinungsbild der Statusleiste (ausgeblendet, Farbe usw.).

Also habe ich den Navigationscontroller unterklassifiziert und den bevorzugten StatusBarStyle überschrieben. Wenn der aktuell sichtbare ViewContorller StatusBarStyleHandler implementiert, fordere ich die Verwendung des Werts als Stil an. Wenn dies nicht der Fall ist, gebe ich einfach einen Standardwert zurück.

Sie lösen eine Aktualisierung des Erscheinungsbilds der Statusleiste aus, indem Sie aufrufen, setNeedsStatusBarAppearanceUpdatewelche preferredStatusBarStyleerneut ausgelöst wird, und die Benutzeroberfläche entsprechend der Rückgabe der Methode aktualisieren

public protocol StatusBarStyleHandler {
    var preferredStatusBarStyle: UIStatusBarStyle { get }
}

public class CustomNavigationCotnroller: UINavigationController {

    public override var preferredStatusBarStyle: UIStatusBarStyle {
        if let statusBarHandler = visibleViewController as? StatusBarStyleHandler {
            return statusBarHandler.preferredStatusBarStyle
        }

        return .default
    }
}

Dann Verwendung

public class SomeController: UIViewController, StatusBarStyleHandler {

    private var statusBarToggle = true

    // just a sample for toggling the status bar style each time method is called
    private func toggleStatusBarColor() {
        statusBarToggle = !statusBarToggle
        setNeedsStatusBarAppearanceUpdate()
    }

    public override var preferredStatusBarStyle: UIStatusBarStyle {
        return statusBarToggle ? .lightContent : .default
    }
}
aryaxt
quelle
Dieser Beitrag wäre viel besser, wenn Sie erklären könnten, warum und wie dies das Problem behebt.
Anstatt UINavigationController zu unterklassifizieren, können Sie auch einfach eine Erweiterung für UINavigationController erstellen und das gleiche Ergebnis erzielen, ohne eine Unterklasse erstellen zu müssen.
Wilforeal
4

1) Eine Einstellung für das gesamte Projekt:

Falls verfügbar, entfernen Sie das UIViewControllerBasedStatusBarAppearanceSchlüssel-Wert-Paar aus Ihrer info.plist oder legen Sie es fest, NOohne es zu entfernen. Wenn es in Ihrer info.plist nicht verfügbar ist, tun Sie nichts. Standard ist NOfür diese Eigenschaft.

Fügen Sie Ihrem AppDelegate.m den folgenden Code hinzu:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

2) Unterschiedliche Einstellungen für unterschiedliche Ansichtssteuerungen:

Fügen Sie UIViewControllerBasedStatusBarAppearanceIhrer info.plist ein Schlüssel-Wert-Paar hinzu und setzen Sie es auf YES.

Wenn Ihr View Controller nicht in Navigation Controller eingebettet ist. Sagen wir MyViewController. Fügen Sie einfach den folgenden Code zu Ihrer MyViewController.m-Datei hinzu. Wenn Ihr View Controller in Navigation Controller eingebettet ist, erstellen Sie eine neue Cocoa Touch-Klasse und machen Sie sie zur Unterklasse von UINavigationController. Sagen wir MyNC. Wählen Sie in Ihrem Storyboard im rechten Bereich die Option "Navigationscontroller-Ansicht" aus. Dienstprogramme -> Identitätsinspektor -> Benutzerdefinierte Klasse -> Klasse, geben Sie "MyNC" ein. Fügen Sie nach dem Verknüpfen der Storyboard-Ansicht mit Ihrer "MyNC" Cocoa Touch-Klasse den folgenden Code zu Ihrer MyNC.m hinzu:

- (BOOL)prefersStatusBarHidden {
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}
Fatih Aksu
quelle
Scheint in iOS9 UIViewControllerBasedStatusBarAppearance enthält standardmäßig den Wert YES, da ich ihn manuell in .plist hinzufügen und auf NO setzen musste, um ordnungsgemäß zu funktionieren.
Mohd Asim
4

Trotz aller Antworten hier fand ich immer noch nicht die genaue Lösung für mich, sondern begann mit der Antwort von Daniel. Am Ende hatte ich:

override var preferredStatusBarStyle: UIStatusBarStyle {
     return visibleViewController?.preferredStatusBarStyle ?? .lightContent
}

in Navigationscontrollern (ähnlich für Registerkarte, nur ausgewählter ViewController). Und dann wird es respektieren:

override var preferredStatusBarStyle: UIStatusBarStyle {
     return .lightContent
}

In jedem Ansichts-Controller, sofern Sie nichts anderes festlegen. Ich muss setNeedsStatusBarAppearanceUpdate()nirgendwo anrufen , es wird nur aktualisiert, wenn Sie an jedem View Controller ankommen.

Andrew Plummer
quelle
2
Nachdem ich stundenlang damit zu kämpfen hatte, hatte ich die fast identische Lösung.
Scott Jungwirth
Irgendwann scheint dies behoben worden zu sein. Nur die Verwendung von PreferredStatusBarStyle in jeder VC funktioniert jetzt gut für mich.
Andrew Plummer
4

iOS 13 Lösung (en)

Die Antwort mit der höchsten Bewertung verwendet "Legacy" -Code 👎

Das Festlegen der barStyleEigenschaft wird jetzt (iOS 13+) als "Legacy-Anpassung" betrachtet. Laut Apple ,

Passen Sie in iOS 13 und höher Ihre Navigationsleiste mithilfe der Eigenschaften standardAppearance, compactAppearance und scrollEdgeAppearance an. Sie können diese älteren Accessoren weiterhin verwenden, um das Erscheinungsbild Ihrer Navigationsleiste direkt anzupassen. Sie müssen das Erscheinungsbild jedoch für verschiedene Balkenkonfigurationen selbst aktualisieren.

In Bezug auf Ihren Versuch - Sie waren auf dem richtigen Weg!

UINavigationControllerist eine Unterklasse von UIViewController(wer wusste 🙃)!

Wenn Sie in Navigations-Controllern eingebettete Ansichts-Controller präsentieren, präsentieren Sie die eingebetteten Ansichts-Controller daher nicht wirklich. Sie präsentieren die Navigationssteuerungen! UINavigationController, als Unterklasse von UIViewController, erbt preferredStatusBarStyleund childForStatusBarStyle, die Sie nach Wunsch einstellen können.

Jede der folgenden Methoden sollte funktionieren:

  1. preferredStatusBarStyleInnerhalb überschreibenUINavigationController

    • preferredStatusBarStyle( doc ) - Der bevorzugte Statusleistenstil für den Ansichtscontroller
    • Unterklasse oder erweitern UINavigationController

      class MyNavigationController: UINavigationController {
          override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }

      ODER

      extension UINavigationController {
          open override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
  2. childForStatusBarStyleInnerhalb überschreibenUINavigationController

    • childForStatusBarStyle( doc ) - Wird aufgerufen, wenn das System den View Controller zur Bestimmung des Statusleistenstils benötigt
    • Laut Apples Dokumentation

      "Wenn Ihr Container-Ansichts-Controller seinen Statusleistenstil von einem seiner untergeordneten Ansichts-Controller ableitet, [überschreiben Sie diese Eigenschaft] und geben Sie diesen untergeordneten Ansichts-Controller zurück. Wenn Sie null zurückgeben oder diese Methode nicht überschreiben, wird der Statusleistenstil für self verwendet Wenn sich der Rückgabewert dieser Methode ändert, rufen Sie die Methode setNeedsStatusBarAppearanceUpdate () auf. "

    • Mit anderen Worten, wenn Sie Lösung 3 hier nicht implementieren, greift das System auf Lösung 2 oben zurück.
    • Unterklasse oder erweitern UINavigationController

      class MyNavigationController: UINavigationController {
          override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }

      ODER

      extension UINavigationController {    
          open override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }
    • Sie können jeden View Controller zurückgeben, den Sie oben möchten. Ich empfehle eine der folgenden Möglichkeiten:

      • topViewController(of UINavigationController) ( doc ) - Der Ansichts-Controller oben im Navigationsstapel
      • visibleViewController(of UINavigationController) ( doc ) - Der Ansichtscontroller, der der aktuell sichtbaren Ansicht in der Navigationsoberfläche zugeordnet ist (Hinweis: Dies kann "einen Ansichtscontroller umfassen, der modal über dem Navigationscontroller selbst dargestellt wurde").

Hinweis: Wenn Sie sich für eine Unterklasse entscheiden UINavigationController, denken Sie daran, diese Klasse über den Identitätsinspektor in IB auf Ihre Navigationssteuerungen anzuwenden.

PS Mein Code verwendet die Swift 5.1-Syntax 😎

Andrew Kirna
quelle
1
Sehr vollständige Antwort, danke! Auch etwas, mit dem ich eine Weile zu kämpfen hatte: Unter iOS 13 .defaultberücksichtigt der Stil den Dunkelmodus und ist nicht dokumentiert. Wenn Sie also auch frühere iOS-Versionen unterstützen, können Sie ihn hinzufügen, if #available(iOS 13, *) { return .darkContent } else { return .default }wenn Sie versuchen, den Statusleistenstil manuell gemäß dem zu konfigurieren Farbe hinter der Statusleiste und diese Farbe ist "hell".
Valcanaia
1
Beachten Sie, dass die Erweiterungsmethode zum Überschreiben von var in Xcode 11.4 / iOS 13.4
Marc Etcheverry
Weil die Erweiterung der Ziel-C-Klassen in Swift über Ziel-C-Kategorien implementiert wird. Das Überschreiben von Methoden durch Ziel-C-Kategorien wird nicht empfohlen und ist wahrscheinlich fehlerhaft. Siehe stackoverflow.com/a/38274660/2438634
Marc Etcheverry
Obwohl das Überschreiben des UINavigationControllers definitiv funktioniert, sieht es auf der Apple-Seite wie ein Fehler aus, dass der childForStatusBarStyle standardmäßig nicht den topViewController zurückgibt. Zum Beispiel macht UITabBarController dies für seine Registerkarten. Für mich gibt es keinen Grund, warum UINavigationController, ein reiner Container-Controller für das Hosten "echter" View-Controller, anstatt eine eigene Benutzeroberfläche zu präsentieren, diese Statusleisten-Stile "auffressen" sollte. Erstellt ein Radar für Apple.
Igor Vasilev
1

Wenn Sie die statusBar während splashScreen ausblenden möchten, aber den Stil in Light Content ändern möchten (StatusBarInitiallyHidden on Plist muss NO sein, um statusBar on splash auszublenden), können Sie dies der didFinishLaunchingWithOptions-Methode von appDelegate hinzufügen, um zu lightContent zu wechseln.

[[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
aalesano
quelle
1

schnelles Beispiel

in AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent;

    return true
}

in info.plist set Ansicht der Controller-basierten Statusleiste anzeigen: NEIN

fyalavuz
quelle
1

Wenn Sie verwenden NavigationController, können Sie eine Unterklasse NavigationControllererstellen, damit der untergeordnete Ansichtscontroller konsultiert wird

// MyCustomNavigationController

- (NSUInteger)supportedInterfaceOrientations {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk shouldAutorotate];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk preferredStatusBarStyle];
}

- (UIViewController *)findChildVC {
    return self.viewControllers.firstObject;
}
onmyway133
quelle
1

Swift 4.2

extension UITabBarController {
    open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}
Vyacheslav
quelle
Beachten Sie, dass die Erweiterungsmethode zum Überschreiben von var in Xcode 11.4 / iOS 13.4
Marc Etcheverry
@MarcEtcheverry also, warum hast du die Antwort abgelehnt? Es scheint merkwürdig.
Vyacheslav
Weil die Erweiterung der Ziel-C-Klassen in Swift über Ziel-C-Kategorien implementiert wird. Das Überschreiben von Methoden durch Ziel-C-Kategorien wird nicht empfohlen und ist wahrscheinlich fehlerhaft. Siehe stackoverflow.com/a/38274660/2438634
Marc Etcheverry
@MarcEtcheverry 'nicht empfohlen'! = 'Niemals benutzen!'. für jul2018 war die antwort richtig. Auch diese Antwort ist nicht aktuell. Dies ist kein Grund, sie abzulehnen. Ich kann die Zukunft nicht sehen
Wjatscheslaw
0

Sie können den Statusleistenstil festlegen. Es ähnelt der Statusleiste wie IOS 6 und darunter.
Fügen Sie diese Methoden in Ihren View Controller ein

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleBlackOpaque;
}

und rufen Sie diese Methode aus der Ansicht auf, wurde so geladen

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
    {
       [self setNeedsStatusBarAppearanceUpdate];
    }
Ganapathy
quelle
Meinst du [self setStatusBarNeedsUpdate]im zweiten Block? (Oder zumindest etwas anderes).
mxcl
0

Ich möchte nur eine Notiz für einen bestimmten Fall hinzufügen, mit dem ich konfrontiert war. Ich hatte ein anderes UIWindow in meiner App, um ein Chat-Gesicht anzuzeigen, das die ganze Zeit über in meiner App schwebt. Dadurch funktionierte keine der oben genannten Lösungen, und ich bin mir nicht sicher, warum! Mir ist nur aufgefallen, dass mein ViewController im neuen UIWindow der Grund dafür war! Und wenn ich den Statusleistenstil ändern wollte, muss ich dies in diesem Ansichts-Controller des neuen UIWindow tun.

Dieser Hinweis könnte anderen helfen, die eine ähnliche Struktur haben! Grundsätzlich können Sie die oben genannten Lösungen im ViewController des neuen UIWindow anwenden.

Auch dies ist ein spezieller Fall.

Vielen Dank

Ehab Saifan
quelle
-1

Für Swift 3 in Ihrem UIViewController:

override var preferredStatusBarStyle : UIStatusBarStyle { return UIStatusBarStyle.lightContent }
Mavrick Laakso
quelle