Ich versuche, meine iOS 7-App in iOS 8 in Xcode 6 GM umzuwandeln, und wenn ich sie auf iPhone 5s oder niedrigeren Simulatoren mit iOS 8 betreibe, ist alles in Ordnung, aber bei den iPhone 6 und 6 Plus-Simulatoren die Statusleiste hat schwarzen Text anstelle von Weiß, wie er sonst immer und überall ist. Ich habe die Info.plist UIStatusBarStyle durch Xcode auf "Transparent Black Style (alpha of 0.5)" gesetzt, und das scheint überall den gewünschten Effekt zu haben. Irgendwelche Ideen, was los ist?
(Ich habe bisher noch keines der Storyboards berührt. Könnte es etwas damit zu tun haben? Ich hatte gehofft, ich könnte das für eine Weile aufschieben :)
Dieser Fehler tritt nur dann auf, wenn Ihre App an die Auflösung der neueren Geräte angepasst wird.
Eine schnelle Lösung (wer weiß, ob dies überhaupt in 8.1 angesprochen wird), bietet die richtige Auflösung beim Laden von Bildern in Ihrem App-Paket.
Von https://developer.Apple.com/ios/human-interface-guidelines/graphics/launch-screen/
For iPhone 7, iPhone 6s, iPhone 6:
750 x 1334 (@2x) for portrait
1334 x 750 (@2x) for landscape
For iPhone 7 Plus, iPhone 6s Plus, iPhone 6 Plus:
1242 x 2208 (@3x) for portrait
2208 x 1242 (@3x) for landscape
In meiner App unterstützen wir nur das Portrait. Wenn Sie also 750x1334 und 1242x2208 verwenden, wird dieses Problem behoben.
Um nur zu bestätigen, falls dies nicht offensichtlich war, müssen Sie UIStatusBarStyleLightContent für Ihren Statusleistenstil verwenden.
So habe ich es behoben
In PLIST Controller-basierte Statusleiste anzeigen NO Statusleistenstil UIStatusBarStyleLightContent
In AppDelegate DidFinishLaunching
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
[self.window setBackgroundColor:[UIColor whiteColor]];
In jedem View Controller
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
In iOS 7 funktionierte die Statusleiste meiner App nur mit den Projekt-/Zieleinstellungen:
Status bar style = UIStatusBarStyleLightContent
und
View controller-based status bar appearance = NO
in iOS 8 (iPhone 6 und iPhone 6 Plus-Simulatoren) wurde die Statusleiste jedoch nicht angezeigt. Ändern Sie das Erscheinungsbild der View Controller-basierten Statusleiste in YES und fügen Sie dann Folgendes hinzu:
// Objective C
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
//Swift
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
der ViewController führte dazu, dass die weiße Statusleiste wieder angezeigt wurde, jedoch erst, nachdem der Root-Controller gestartet wurde. Während des ersten Starts bleibt die Statusleiste schwarz.
Eine ähnliche Antwort (derzeit als 2. gewählt) wurde bereits gepostet, um diesen Beitrag auf dem neuesten Stand zu halten, hier die Swift -Version.
Fügen Sie Ihrer info.plist-Datei eine Zeile mit dem Namen Ansicht der Controller-basierten Statusleiste hinzu und setzen Sie den booleschen Wert aufNO.
Fügen Sie in Ihrer AppDelegate.Swift -Datei die folgende Methode hinzu:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
UIApplication.sharedApplication().statusBarStyle = .LightContent
return true
}
Ich musste diesen Schritt nicht ausführen, damit er funktioniert (d. H. Schritt 1 und 2 und es könnte funktionieren). Falls nicht, versuchen Sie, jedem Ihrer ViewControllers die folgende Methode hinzuzufügen:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Ich hoffe das war hilfreich.
Loic
Erledigt.
Schritt 1: Öffnen Sie die Datei info.plist Ihrer App und setzen Sie UIViewControllerBasedStatusBarAppearance auf NO
Schritt 2: info.plist-Datei Ihrer App und setzen Sie den "Statusleistenstil" auf UIStatusBarStyleLightContent
Fügen Sie die folgende Zeile in der didFinishLaunchingWithOptions:
-Methode von AppDelegate
hinzu
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
Könnte ein Problem mit dem Simulator sein. Verwenden Sie diese Option, um die Standardstatusleiste oder Statusleiste für einen bestimmten View-Controller zu überschreiben.
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
} //This is Swift code
Ich weiß, dass es schlecht ist, das Verhalten in einer Basisklasse mithilfe einer Kategorie zu überschreiben. Dies funktioniert jedoch und kann die schnellste Lösung sein, um das Problem zu beheben.
Schritt 1: Stellen Sie sicher, dass UIViewControllerBasedStatusBarAppearance
oder View controller-based status bar appearance
in Ihrer Anwendungsplistendatei auf YES
gesetzt ist.
Schritt 2: Fügen Sie Ihrem Projekt den folgenden Code hinzu:
@implementation UIViewController (StatusBarColorFix)
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end
Eine gute Lösung für dieses Problem ist die Verwendung der neuen Laib-Image-Nib-Unterstützung, die bei den iPhone 6-Modellen verwendet wird. Es scheint, als gäbe es in iOS 8 nur einen Fehler, der besagt, dass die iPhone 6-Modelle den Status der Statusleiste beim Starten nicht korrekt überprüfen, jedoch behoben werden, wenn Sie die Startspitze hinzufügen.
Wie Aaron Wasserman hervorgehoben hat, können Sie auch festlegen, dass PNGs für das iPhone 6 und 6+ gestartet werden sollen. Dies scheint auch das Problem zu beheben, sofern Sie sie richtig eingerichtet haben.
Ich habe die folgenden Schritte ausgeführt und sie haben gut für mich gearbeitet, sollte auch unter iOS 8+ arbeiten.
1) Hinzugefügte Eigenschaft Anzeige der Controller-basierten Statusleiste =>NOin Info.plist.
2) Folgender Code in - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
von AppDelegate.m hinzufügen.
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
[self.window setBackgroundColor:[UIColor redColor]]; // Change color as per need.
3) Überschreibungsmethode in ViewController
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Für Swift 4 und iOS 11
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
Hier ist Apple-Richtlinien/Anweisungen über Statusleiste/Textfarbenänderung.
Hier ist - So ändern Sie den Stil der Statusleiste:
Wenn Sie den Status der Statusleiste, die Anwendungsebene, einstellen möchten, setzen Sie UIViewControllerBasedStatusBarAppearance
in der Datei .plist auf NO
.
Oder programmgesteuert von App Delegate aus:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
wenn Sie den Statusleistenstil festlegen möchten, führen Sie auf Ansichtssteuerungsebene die folgenden Schritte aus:
UIViewControllerBasedStatusBarAppearance
in der .plist
-Datei auf YES
, wenn Sie den Statusleistenstil nur auf UIViewController-Ebene festlegen müssen. In der ViewDidLoad-Add-Funktion - setNeedsStatusBarAppearanceUpdate
Überschreiben Sie preferredStatusBarStyle in Ihrem View-Controller.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Legen Sie den Wert für .plist gemäß der Setup-Ebene für Statusleisten fest
Wählen Sie in Ihrem Storyboard Ihren Root-View-Controller aus, und legen Sie den Standardtyp für die Statusleiste fest