2016-07-23 18 views
2

In meiner App zu ändern habe ich 4 Viewcontroller und in zwei von ihnen, ich bin in der Statusleiste von weiß bis schwarz wie folgt zu ändern:rasche ios versuchen Farbe Statusleiste auf bestimmte VCs

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default 
    } 

    override func viewWillDisappear(animated: Bool) { 
     super.viewWillDisappear(animated) 

     UIApplication.sharedApplication().statusBarStyle = .LightContent 
    } 

Das Problem ist, Wenn ich zwischen zwei ViewControllern umschalte, die beide den Code über der Statusleiste haben, ändert sich zuerst die Farbe in Schwarz, was richtig ist, aber dann ändert sich die Farbe wieder in Weiß, wenn ich den anderen ViewController betrete.

Wie kann ich die Statusleiste auf bestimmten ViewControllern weiß halten?

Antwort

0

Versuchen Sie, die folgende Methode in Ihren VCs hinzuzufügen. Verwenden Sie .default oder .lightContent, um die Farbe der Statusleiste zu ändern. Getestet habe mich mit Xcode 8 und schnelle 3:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.default; 
} 

Ich habe eine neue Tabbed-Anwendung mit Xcode 7.3.1 und raschen 2.3. Ich habe zwei Tabs mit den Klassen FirstViewController und SecondViewController zugeordnet. In FirstViewController habe ich die folgende Methode:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.Default; 
} 

und in dem SecondViewController, ich den Hintergrund in Schwarz geändert und ich fügte die folgende Methode:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    return UIStatusBarStyle.LightContent; 
} 

Schließlich habe ich noch zwei Tasten in dem FirstViewController. Ein Knopf zeigt einen Controller modal und der andere Knopf durch Drücken. Wenn präsentierte ich die Ansicht modal die Arbeit ‚preferredStatusBarStyle‘, aber wenn ich durch Push präsentierte ich brauche die folgende Codezeile hinzuzufügen:

self.navigationController?.navigationBar.barStyle = .Black 
+0

Dies erfordert auch das Hinzufügen des 'View controller-based Statusleiste Aussehen' Schlüssel auf ein/YES in Projekt' info. plist 'Datei und erfordert möglicherweise eine benutzerdefinierte Implementierung von' - (UIViewController *) childViewControllerForStatusBarStyle; 'auf der Root-View-Controller-Unterklasse der Anwendung abhängig von der Architektur Ihrer View-Hierarchie – markedwardmurray

+0

Das hat nicht funktioniert coz, was @markedwardmurray sagte. Aber kann ich nicht einfach '' 'override func viewWillAppear (animiert: Bool) { super.viewWillAppear (animiert) UIApplication.sharedApplication(). StatusBarStyle = UIStatusBarStyle.Default }' '' in jeder VC? – user2722667

+0

Sie würden denken, aber es gibt eine Menge Eigenheiten mit dem Ändern des globalen Status der Statusleiste zwischen View-Controllern. Die Verwendung der View Controller-basierten Statusleiste ist zuverlässiger. In iOS 10 werden die Getter, die auf UIViewController überschrieben werden sollen, in vollständige Eigenschaften umgewandelt. Die globale Erscheinungsmethode stammt aus den Tagen, an denen erwartet wurde, dass eine Anwendung ein einzelnes Farbschema hat, entweder hell oder dunkel. Es funktioniert nicht gut, um es nach dem Start der Anwendung mit der Frequenz zu wechseln – markedwardmurray

0

Wenn Sie wirklich wollen nicht die Delegatmethoden für preferredStatusBarStyle außer Kraft zu setzen, Sie können nach wie vor:

UIApplication.sharedApplication().statusBarStyle = .LightContent 

durch Entfernen:

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    UIApplication.sharedApplication().statusBarStyle = .LightContent 
} 

und lassen Sie lassen nur die Statusleiste eingestellt werden, indem, was in viewWillAppear geschieht. Offensichtlich ist dies anfälliger für Fehler, aber wenn Ihre Navigation relativ linear ist, dann wäre es die einfachste Lösung.