Meine Anwendung hat einen dunklen Hintergrund, aber in iOS 7 wurde die Statusleiste transparent. Ich kann dort also nichts sehen, nur die grüne Batterieanzeige in der Ecke. Wie kann ich die Textfarbe der Statusleiste wie auf dem Startbildschirm in Weiß ändern?
Setzen Sie UIViewControllerBasedStatusBarAppearance
in der .plist-Datei auf YES
.
Im viewDidLoad
mache einen [self setNeedsStatusBarAppearanceUpdate];
Fügen Sie die folgende Methode hinzu:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Hinweis : Dies funktioniert nicht für Controller innerhalb von UINavigationController
, siehe Tysons Kommentar unten :)
Swift 3 - Dies funktioniert mit Controllern in UINavigationController
. Fügen Sie diesen Code in Ihren Controller ein.
// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 5 und SwiftUI
Für SwiftUI erstelle eine neue Swift Datei mit dem Namen HostingController.Swift
import Foundation
import UIKit
import SwiftUI
class HostingController: UIHostingController<ContentView> {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Ändern Sie dann die folgenden Codezeilen in dem SceneDelegate.Swift
window.rootViewController = UIHostingController(rootView: ContentView())
zu
window.rootViewController = HostingController(rootView: ContentView())
Alternativ können Sie die Darstellung der Statusleiste auf der Basis des View-Controllers deaktivieren:
View controller-based status bar appearance
in Ihrem Info.plist
auf NO
.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
anHinweis: Diese Methode ist in iOS9 veraltet. Verwenden Sie stattdessen preferredStatusBarStyle
auf dem UIViewController. (siehe Apple Developer Library )
Sie können dies tun, ohne eine Codezeile zu schreiben!
Gehen Sie wie folgt vor, um die Textfarbe der Statusleiste in der gesamten App weiß zu machen
Auf Sie Projektliste Datei:
Transparent black style (alpha of 0.5)
NO
NO
Hinweis: Die meisten Antworten funktionieren nicht mit iOS 7/8
Setzen Sie in der Info.plist 'Controller-basierte Statusleiste anzeigen' auf NO
In AppDelegate hinzufügen
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
zu
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
......
...
}
Diese Lösung funktioniert für iOS 7/8
Für mich passierte nichts mit der Verwendung aller Dinge in den anderen Antworten (und aus anderen Quellen/Dokumentationen). Was geholfen hat, war, den Navigationsleistenstil im XIB auf "Schwarz" zu setzen. Dadurch wurde der Text ohne Code in Weiß geändert.
Nichts davon hat bei mir funktioniert, also hier ist eine funktionierende Lösung ...
Fügen Sie in Info.plist
eine Zeile hinzu:
UIViewControllerBasedStatusBarAppearance
und stellen Sie den Wert NO
ein.
Fügen Sie dann in AppDelegate in didFinishLaunchingWithOptions
diese Zeilen hinzu:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
Sie müssen keinen Code dafür machen
Sie müssen den folgenden Schlüssel in info.plist hinzufügen:
& Setzt seinen Werttyp auf Boolean & Wert auf NO. Klicken Sie dann auf Projekteinstellungen und dann auf die Registerkarte Allgemein. Setzen Sie unter Bereitstellungsinformationen den bevorzugten Statusleistenstil auf.
Das ist es.
Nur zwei Schritte wie folgt:
Schritt 1:
Auf der Registerkarte Info des project target
Zeile hinzufügen:
UIViewControllerBasedStatusBarAppearance
, Wert NO
einstellen.
Schritt 2:
Im Projekt AppDelegate.m
:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
Dies funktioniert in Golden Master iOS 7 und Xcode 5 GM seed und iOS7 SDK, die am 18. September 2013 veröffentlicht wurden (zumindest mit ausgeblendetem Navigationscontroller):
Setzen Sie the UIViewControllerBasedStatusBarAppearance
in Info.plist
auf NO
.
In der ViewDidLoad
-Methode oder irgendwo, wo möchten Sie den Statusleistenstil ändern: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Befindet sich Ihr UIViewController in einem UINavigationController, müssen Sie den BarStyle einstellen:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
Die ursprüngliche Antwort ist hier
Wenn Sie einen eingebetteten Navigationscontroller mit Interface Builder erstellt haben, müssen Sie in einer Klasse, die Ihren Navigationscontroller verwaltet, Folgendes festlegen:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
Das sollte alles sein, was du brauchst.
Fügen Sie in AppDelegate.m Folgendes hinzu.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
Setzen Sie in der Plist-Datei die Option "Controller-basierte Statusleiste anzeigen" auf "Nein".
Nun, das funktioniert wirklich wie ein Kinderspiel für mich.
Gehen Sie zu info.plist
Ihrer App.
View controller-based status bar appearance
auf NO
Status bar style
auf UIStatusBarStyleLightContent
Gehen Sie dann zum Vertreter Ihrer App und fügen Sie den folgenden Code ein, in dem Sie den RootViewController Ihres Windows festlegen.
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
[self.window.rootViewController.view addSubview:view];
}
Bingo. Es funktioniert für mich.
Einfach in Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
In Swift 3 geht das ganz einfach mit 2 Schritten. Gehen Sie zu Ihrer info.plist und ändern Sie den Schlüssel
View controller-based status bar appearance
auf "NO". Dann fügen Sie im Appdelegate einfach diese Zeile in didfinishlaunchingwithoptions hinzu
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.statusBarStyle = .lightContent
return true
}
in iOS9 ist dies veraltet. Jetzt sollten Sie diese Eigenschaft im rootviewcontroller überschreiben
wenn dies in iOS 9 veraltet ist, sollte dies auf dem rootviewcontroller erfolgen
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
mit iOS 7 können einzelne Ansichtscontroller das Erscheinungsbild der Statusleiste bestimmen, wie in der Entwicklerdokumentation Apple beschrieben:
mit iOS 7 können Ansichtscontroller den Stil der Statusleiste anpassen, während die App ausgeführt wird. Eine gute Möglichkeit, den Statusleistenstil dynamisch zu ändern, besteht darin,
preferredStatusBarStyle
zu implementieren und - innerhalb eines Animationsblocks - das Erscheinungsbild der Statusleiste zu aktualisieren undsetNeedsStatusBarAppearanceUpdate
aufzurufen.
Das globale Festlegen des Statusleisten-Erscheinungsbilds erfolgt in zwei Schritten.
Zunächst müssen Sie iOS mitteilen, dass Sie das Erscheinungsbild der Statusleiste nicht von Ansicht zu Ansicht festlegen möchten.
Dann müssen Sie die Verantwortung übernehmen und den neuen globalen Statusleistenstil festlegen.
Um die Ansicht-für-Ansicht-Statusleistensteuerung zu deaktivieren, müssen Sie die Eigenschaft View controller-based status bar appearance
in Info.plist
festlegen.
Öffnen Sie den Projektnavigator, wählen Sie das Projekt für Ihre iOS-App aus und klicken Sie dann auf die Registerkarte Info.
Bewegen Sie den Mauszeiger über eine Zeile und klicken Sie auf das angezeigte Pluszeichen, um Ihrem .plist
eine neue Eigenschaft hinzuzufügen.
Geben Sie View controller-based status bar appearance
in das Feld Schlüssel ein und vergewissern Sie sich, dass das Feld Typ auf Boolean
eingestellt ist. Geben Sie abschließend im Feld Wert NO
ein.
Um einen globalen Stil für die Statusleiste festzulegen, fügen Sie auf der Registerkarte Info eine weitere Eigenschaft mit dem Schlüssel Status bar style
, dem Typ String
und dem Wert Opaque black style
hinzu.
Hier ist ein Blog-Beitrag mit etwas mehr Details und einigem Beispielcode:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
Du musst kein Extra machen, schreibe einfach diesen Code in deinen viewController und erhalte die Statusleistenfarbe Weiß
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Antwort aktualisiert für für Xcode GM Seed:
In Info.plist
setzen View controller-based status bar appearance
als NO
Legen Sie im Projekt Folgendes fest:
In ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Ich denke, dass alle Antworten nicht wirklich auf das Problem hinweisen, da sie alle in bestimmten Szenarien funktionieren. Wenn Sie jedoch alle Fälle abdecken müssen, befolgen Sie die folgenden Punkte:
Abhängig davon, wo Sie den Lichtstil der Statusleiste benötigen, sollten Sie immer diese 3 Punkte beachten:
1) Wenn Sie die Statusleiste auf dem Startbildschirm oder an anderen Stellen benötigen, an denen Sie sie nicht steuern können (nicht in View Controllern, sondern in einigen systemgesteuerten Elementen/Momenten wie dem Startbildschirm) ) Sie gehen zu Ihren Projekteinstellungen
2) Wenn Sie einen Controller in einem Navigationscontroller haben Sie können ihn im Interface Builder wie folgt ändern:
a) Wählen Sie die Navigationsleiste Ihres Navigationscontrollers
b) Setzen Sie dann den Stil der Navigationsleiste auf "Schwarz", da dies bedeutet, dass Sie unter Ihrer Statusleiste einen "schwarzen" -> dunklen Hintergrund haben, sodass die Statusleiste auf Weiß gesetzt wird
Oder machen Sie es im Code wie folgt
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3) Wenn Sie nur den Controller haben, der seinen eigenen Statusleistenstil haben muss und nicht als UINavigationController in eine Container-Struktur eingebettet ist
Legen Sie den Statusleistenstil im Code für den Controller fest:
Einfach anrufen
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
in dem
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
die Methode meines AppDelegate
funktioniert in iOS7 hervorragend.
Hier finden Sie Apple Guidelines/Instruction Informationen zum Ändern der Statusleiste. In der Statusleiste ist nur dunkles Licht (solange schwarz) zulässig.
So ändern Sie den Statusleistenstil:
Wenn Sie den Statusleistenstil festlegen möchten, setzen Sie die Anwendungsebene in Ihrer .plist-Datei auf UIViewControllerBasedStatusBarAppearance
auf NO
.
wenn Sie den Statusleistenstil festlegen möchten, gehen Sie auf Ansichts-Controller-Ebene folgendermaßen vor:
UIViewControllerBasedStatusBarAppearance
in der Datei .plist
auf YES
, wenn Sie den Statusleistenstil nur auf UIViewController-Ebene festlegen müssen.In der viewDidLoad Funktion hinzufügen - setNeedsStatusBarAppearanceUpdate
überschreiben Sie preferredStatusBarStyle in Ihrem Ansichtscontroller.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Stellen Sie den Wert von .plist entsprechend der Setup-Ebene für den Statusleistenstil ein.
Hier ist ein kniffliger Trick, um die Hintergrundfarbe für die Statusleiste während des Starts der Anwendung oder während viewDidLoad Ihres View Controllers zu ändern/festzulegen.
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
return true
}
}
or
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
}
}
Hier ist das Ergebnis:
Dies ist im iOS 7 UI Transition Guide dokumentiert. Für den direkten Zugriff benötigen Sie eine Apple Entwickler-ID. Der relevante Auszug:
Da die Statusleiste transparent ist, wird die Ansicht dahinter durchgehend angezeigt. [...] Verwenden Sie eine
UIStatusBarStyle
-Konstante, um festzulegen, ob der Inhalt der Statusleiste dunkel oder hell sein soll:
UIStatusBarStyleDefault
zeigt dunklen Inhalt an. [...]
UIStatusBarStyleLightContent
zeigt den Lichtinhalt an. Verwenden Sie diese Option, wenn sich dunkler Inhalt hinter der Statusleiste befindet.
Möglicherweise auch von Interesse:
In iOS 7 können Sie den Stil der Statusleiste von einem einzelnen vew-Controller aus steuern und ändern, während die App ausgeführt wird. Um dieses Verhalten zu aktivieren, fügen Sie den
UIViewControllerBasedStatusBarAppearance
-Schlüssel zurInfo.plist
-Datei einer App hinzu und geben Sie den WertYES
ein.
Ich würde auf jeden Fall empfehlen, sich das Dokument anzusehen, auf das Sie wiederum mit Ihrer Entwickler-ID Apple zugreifen können.
Wenn Sie dasselbe Ergebnis mit Swift erzielen möchten, können Sie diesen Code in Ihrer AppDelegate.Swift-Datei verwenden:
UINavigationBar.appearance().barStyle = .BlackTranslucent
Und der Text Ihrer Statusleiste wird weiß sein :-)!
Wenn Sie weiterhin View controller-based status bar appearance
in info.plist auf YES setzen möchten, was bedeutet, dass Sie die Statusleiste für jeden View-Controller ändern können, verwenden Sie für weißen Text in der Statusleiste in ViewDidLoad Folgendes:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
Ich habe einige Dinge anders gemacht und es funktioniert für mich.
Ohne Codeänderungen habe ich meine .plist-Datei folgendermaßen konfiguriert:
Ich hoffe, es hilft.
Für jeden View-Controller ändere ich die Eigenschaft "Simulierte Metriken" der Statusleiste im Storyboard von "abgeleitet" in "Lichtinhalt".
in der info.plist setzen Sie den Feldwert NO Anzeige der controller-basierten Statusleiste und setzen Sie Statusleiste style light in target> general setting.
Lassen Sie mich Ihre Frage vollständig beantworten. Das Ändern der Textfarbe in der Statusleiste ist sehr einfach, in iOS 7 jedoch etwas verwirrend, insbesondere für Anfänger.
Wenn Sie versuchen, die Farbe in Storyboard von Schwarz auf Weiß zu ändern, indem Sie den Ansichts-Controller auswählen und auf der rechten Seite auf Simulierte Metriken klicken, funktioniert dies nicht und ich weiß nicht warum. Es sollte so funktionieren, aber wie auch immer.
Zweitens finden Sie die UIViewControllerBasedStatusBarAppearance-Eigenschaft nicht in Ihrer Liste, sie ist jedoch standardmäßig nicht vorhanden. Sie müssen es selbst hinzufügen, indem Sie auf die Schaltfläche + klicken und dann auf NEIN setzen.
iOS 7 Statusleiste Textfarbe
Zuletzt müssen Sie zu Ihrer AppDelegate.m-Datei gehen und die folgende Zeile in die didFinishLaunchingWithOptions-Methode einfügen:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Dadurch wird die Farbe für alle Ihre View-Controller in Weiß geändert. Hoffe das hilft!
Fügen Sie in Plist Folgendes hinzu:
UIStatusBarStyleLightContent
NO
Um es zusammenzufassen, bearbeite dein Projekt Info.plist
und füge hinzu:
View controller-based status bar appearance
: NO
Status bar style
: Opaque black style
oder wenn Sie rohen Schlüssel/Wert Plist haben
UIViewControllerBasedStatusBarAppearance
: NO
UIStatusBarStyle
: Opaque black style
Der Schlüssel dazu ist, dass nur der Vollbild-Ansichts-Controller den Stil der Statusleiste bestimmt.
Wenn Sie einen Navigationscontroller verwenden und die Statusleiste auf Sichtcontrollerbasis steuern möchten, sollten Sie UINavigationController in Unterklassen unterteilen und preferredStatusBarStyle so implementieren, dass die Einstellungen von topViewController zurückgegeben werden.
Stellen Sie sicher, dass Sie die Klassenreferenz in Ihrer Storyboard-Szene von UINavigationController in Ihre Unterklasse ändern (z. B. MyNavigationController im folgenden Beispiel).
(Das Folgende funktioniert für mich. Wenn Ihre App auf TabBar basiert, möchten Sie etwas Ähnliches tun, indem Sie den UITabBarController in Unterklassen unterteilen, aber ich habe das nicht ausprobiert.).
@interface MyNavigationController : UINavigationController
@end
@implementation MyNavigationController
- (UIStatusBarStyle)preferredStatusBarStyle
{
return self.topViewController.preferredStatusBarStyle;
}
@end
Für Xcode 5.1:
Hinzufügen von " Anzeigen des Aussehens der controller-basierten Statusleiste " zu NO in der .plist.
Fügen Sie in AppDelegate Folgendes hinzu:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Das ist alles!
Sie können dies von info.plist aus tun:
1) "Controller-basierte Statusleiste anzeigen" auf "NEIN" gesetzt
2) "Statusleistenstil" auf "UIStatusBarStyleLightContent" gesetzt
getan
Setzen Sie in der Info.plist 'Controller-basierte Statusleiste anzeigen' auf NO
In AppDelegate hinzufügen
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Swift 3 - Xcode 8.
Wenn Sie möchten, dass die Statusleiste auf dem Startbildschirm anfangs ausgeblendet ist, versuchen Sie Folgendes:
Schritt 1: Füge folgendes zu info.plist
hinzu.
View controller-based status bar appearance
Wert NO
Status bar is initially hidden
Wert YES
Schritt 2: Schreibe dies in die didFinishLaunchingWithOptions
Methode.
UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
Wenn Ihre Anwendung standardmäßig UIStatusBarStyleLightContent
haben muss, Sie aber dennoch UIStatusBarStyleDefault
auf einigen Bildschirmen verwenden möchten, können Sie die Farbe der Statusleiste auf Controllerebene verwalten In diesem Fall müssen Sie preferredStatusBarStyle
in jedem Ansichtscontroller überschreiben (oder in einem Basisansichtscontroller implementieren, von dem alle anderen Ansichtscontroller erben). Hier ist eine andere Möglichkeit, dieses Problem zu lösen:
UIViewControllerBasedStatusBarAppearance
in der Liste auf NO
UIStatusBarStyle
auf UIStatusBarStyleLightContent
Alle Ansichtscontroller verwenden weißen Text für die Statusleiste. Fügen Sie diese Methoden jetzt nur in den Ansichtscontrollern hinzu, die die Statusleiste mit schwarzem Text benötigen:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
Der einfachste Weg, dies von Xcode aus (ohne jegliche Codierung) zu tun, ist:
View controller-based status bar appearance
hinzu und setzen Sie den Wert auf NO
.Deployment Info
finden Sie eine Option für Status Bar Style
. Setzen Sie den Wert dieser Option auf Light
.Sie haben die Statusleiste White
.
Ich mache dies in iOS 9 und Swift 2.0, wenn ich UINavigationController verwende
self.navigationController?.navigationBar.barStyle = UIBarStyle.Black
Und das mache ich, wenn ich Modal Segue benutze
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
In iOS 8: NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
zu viewDidLoad
hinzufügen
Löschen Sie das Controller-basierte Statusleisten-Erscheinungsbild anzeigen in der .plist-Datei (falls Sie es erstellt haben) und erstellen Sie es erneut.
setzen Sie Status Bar Style auf Opaque Black Style
Fügen Sie in appDelegate den folgenden Code unter didFinishLaunching hinzu.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Dies scheint ein Problem mit dem aktuellen Build von Xcode und iOS 7 zu sein.
Einige verwandte Inhalte in Apples Entwicklerforen befinden sich in eine Suche nach UIStatusBarStyleLightContent in "iOS 7 Beta Livability" in den Apple Entwicklerforen * (derzeit 32 Beiträge).
Ich bin darauf gestoßen und habe versucht, es auf die Light-Version einzustellen.
(Dies ist nur eine Fortsetzung von Aarons Antwort.)
Das hat bei mir funktioniert:
Stellen Sie UIViewControllerBasedStatusBarAppearance
in YES
auf plist
Die rootViewController
benötigt die Methodenimplementierung für
-(UIStatusBarStyle)preferredStatusBarStyle
Da mein rootViewController
von Cocoapods verwaltet wird (JASidePanelController
), habe ich diese Methode über eine Kategorie hinzugefügt:
#import "JASidePanelController+StatusBarStyle.h"
@implementation JASidePanelController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
Ändern Sie einfach 1)Info.plist
Controller-basierte Statusleiste anzeigen appearance
-> NO
und schreiben Sie 2)
[[UIApplication
sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
im
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
ändern Sie die Textfarbe der Statusleiste für alle ViewController
Swift
if Controller-basiertes Statusleisten-Erscheinungsbild anzeigen = YES in Info.plist
verwenden Sie dann diese Erweiterung für alle NavigationController
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
wenn es keinen UINavigationController gibt und nur über UIViewController verfügt, verwenden Sie den folgenden Code:
extension UIViewController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Ziel C
kategorie Klasse erstellen
Für UIViewController
In UIViewController + StatusBarStyle.h
@interface UIViewController (StatusBarStyle)
@end
In UIViewController + StatusBarStyle.m
#import "UIViewController+StatusBarStyle.h"
@implementation UIViewController (StatusBarStyle)
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
Für UINavigationController
In UINavigationController + StatusBarStyle.h
@interface UINavigationController (StatusBarStyle)
@end
In UINavigationController + StatusBarStyle.m
#import "UINavigationController+StatusBarStyle.h"
@implementation UINavigationController (StatusBarStyle)
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
Sie können dies für iOS 6 und 7 verwenden:
#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif
[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
Wenn Sie unter iOS 7 UIViewControllerBasedStatusBarAppearance == YES verwenden möchten und Ihr Stammansichts-Controller UINavigationController ist, sollten Sie eine Unterklasse festlegen und childViewControllerForStatusBarStyle wie folgt überladen:
- (UIViewController*) childViewControllerForStatusBarStyle
{
return self.viewControllers.lastObject;
}
Anschließend wird preferredStatusBarStyle auf Push-View-Controllern aufgerufen.
Bitte versuchen Sie dies
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[application setStatusBarHidden:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = [UIColor blackColor];
}
Was ich für Swift und den Navigationscontroller tun musste
extension UINavigationController {
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Wenn Sie eine beliebige Farbe festlegen möchten, verwenden Sie den folgenden Code.
id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];
id statusBar = [statusBarWindow valueForKey:@"statusBar"];
SEL setForegroundColor_sel = NSSelectorFromString(@"setForegroundColor:");
if([statusBar respondsToSelector:setForegroundColor_sel]) {
// iOS 7+
[statusBar performSelector:setForegroundColor_sel withObject:YourColorHere];
^^^^^^^^^^^^^
}
Ich weiß, dass ich auf die private API zugreife, aber ich habe dies in vielen Projekten verwendet und Apple habe es genehmigt.
Senden Sie diesen Code erst beim Senden der App an Apple im Abschnitt "Kommentare" und teilen Sie mit, dass Sie diesen Code verwenden, um die Farbe der Statusleiste zu ändern.
Und ja , vergiss auch nicht unten.