web-dev-qa-db-de.com

Wie ändere ich meinen Statusleistenstil in Swift 2 / iOS 9 richtig?

Ich versuche, den Stil meiner Statusleiste in .Light Zu ändern, aber der vorherige Code, den ich in Swift 1.2 implementiert habe, scheint nicht mehr zu funktionieren. Hier ist der Code:

override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.sharedApplication().statusBarStyle = .LightContent

    }

jetzt habe ich die info.plist-Einstellung View controller-based status bar appearance auf YES gesetzt und beim Lesen des UIKit-Dokuments werden alle StatusBarStyle-Änderungen annulliert und die Standardeinstellungen beibehalten. Wenn ich jedoch die Einstellung auf "NEIN" ändere und den Status "BarStyle" ändere, wird dieses <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable In meinem Debugger angezeigt. Handelt es sich also um einen Fehler in Xcode? weil, um den Statusleistenstil zu ändern, müssen Sie die info.plist-Einstellung auf NEIN ändern, aber wenn das passiert, tritt ein Fehler auf

48
John Jackson

Apple hat die Möglichkeit hinzugefügt, den Statusleistenstil in den Bereitstellungsinformationen zu ändern. Wählen Sie einfach "Licht" . ScreenShot of Xcode

Setze auch View controller-based status bar appearance Schlüssel zu NO in Info.plist

info plist

72
Tom Hughes

Ich habe es immer so gemacht.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    //Changing Status Bar
    override func preferredStatusBarStyle() -> UIStatusBarStyle {

        //LightContent
        return UIStatusBarStyle.LightContent

        //Default
        //return UIStatusBarStyle.Default
    }
}

Es funktioniert in jeder Swift 2.x Version. Dies setzt voraus, dass Sie View controller-based status bar appearance in deinem Info.plist Datei zu YES.

45
dede.exe

Sie können preferredStatusBarStyle weiterhin in Ihrem View-Controller verwenden:

schritt 1: Setzen Sie in der info.plist ViewControllerBasedStatusBarAppearance auf YES. Schritt 2: Fügen Sie diesen Code dem ViewController hinzu, den Sie bearbeiten möchten:

override func  preferredStatusBarStyle() -> UIStatusBarStyle {

    return UIStatusBarStyle.LightContent
}

*** Tipp: Es scheint nur außerhalb der Funktionen ViewDidLoad (), didReceiveMemoryWarning () zu funktionieren.

7
Tom Hughes

Swift 3 fügen Sie einfach View controller-based status bar appearance Mit dem Wert NO zu info.plist Hinzu und fügen Sie dann zu ViewController hinzu, wo Sie möchten:

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
7
MRustamzade

Die Änderung in den Bereitstellungsinformationen funktioniert jedoch trotzdem. Sie müssen den Schlüssel "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" hinzufügen, um die Plist-Datei auf NEIN zu setzen.

6
Yuliia

Sie können dies auch einfach in AppDelegate hinzufügen. Diese Option ist besser, wenn Sie sie für jeden ViewController in der App ändern möchten und sie nicht für jeden anderen VC anders gestalten müssen.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    application.statusBarStyle = UIStatusBarStyle.LightContent
    // instead of 
    // UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false)
    // which gives warning about deprecation in iOS 9

    return true
}
5
Tom Hughes

Hier versuchen Sie dies, es könnte Ihnen helfen

Gehen Sie zuerst zur Datei info.plist und fügen Sie diese "Controller-basierte Statusleiste anzeigen" als Schlüssel hinzu und setzen Sie den Wert auf NO

hier unten im Bild gezeigt enter image description here

danach kommen Sie zur AppDelegate.Swift-Datei und fügen diese UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent Codezeile ein

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool{
 UIApplication.sharedApplication().statusBarStyle =   UIStatusBarStyle.LightContent
 return true
}

so was

4

Sie können in den Bereitstellungsinformationen "Licht" auswählen, müssen dann aber auch das "Controller-basierte Statusleisten-Erscheinungsbild anzeigen" hinzufügen und auf "NEIN" setzen.

4
Telstar

Verwenden Sie für Swift 3 die Variable preferredStatusBarStyle:

 override var preferredStatusBarStyle: UIStatusBarStyle{
    return .lightContent
}
4
bikram sapkota

Es sieht so aus, als wäre es ein Fehler in Xcode 7.0. Ich bekomme auch die Error>: CGContextSaveGState: invalid context 0x0. Fehler beim Einstellen von View controller-based status bar appearance

Im Moment überschreibe ich nur die Farbe der Statusleiste in jedem Ansichtscontroller.

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
} 
4
David M

Die vorhandenen Antworten sind großartig, aber mit den neuen Updates ist es jetzt ein bisschen anders!

override var jetzt statt override func für alle, die verwirrt sind - der Inhalt ist immer noch derselbe und Sie müssen Ihre 'Info.plist' noch ändern:

override var preferredStatusBarStyle: UIStatusBarStyle 
{    
    //LightContent
    return UIStatusBarStyle.lightContent

    //Default
    //return UIStatusBarStyle.default
}
2
Dan

Wenn Sie es von Zeit zu Zeit in Ihrer App ändern möchten, können Sie die bereits erwähnten Überschreibungen preferredStatusBarStyle() verwenden.

Stellen Sie einfach sicher, dass Sie auch setNeedsStatusBarAppearanceUpdate() aufrufen, nachdem Sie preferredStatusBarStyle() aufgerufen haben, um IOS) darüber zu informieren.

0
Hardy_Germany