In XCode 7.3.x hat ill die Hintergrundfarbe für meine Statusleiste mit geändert:
func setStatusBarBackgroundColor(color: UIColor) {
guard let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
return
}
statusBar.backgroundColor = color
}
Aber es scheint, dass dies mit Swift 3.0 nicht mehr funktioniert.
Ich habe versucht mit:
func setStatusBarBackgroundColor(color: UIColor) {
guard let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
return
}
statusBar.backgroundColor = color
}
Aber es gibt mir:
this class is not key value coding-compliant for the key statusBar.
Irgendwelche Ideen, wie man es mit XCode8/Swift 3.0 ändert?
extension UIApplication {
var statusBarView: UIView? {
if responds(to: Selector("statusBar")) {
return value(forKey: "statusBar") as? UIView
}
return nil
}
}
UIApplication.shared.statusBarView?.backgroundColor = .red
Hintergrundfarbe der Statusleiste "ändern":
let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor(red: 32/255, green: 149/255, blue: 215/255, alpha: 1.0)
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)
Textfarbe der Statusleiste ändern:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Update: Bitte beachten Sie, dass sich der Rahmen der Statusleiste ändert, wenn die Ansicht gedreht wird. Sie können den erstellten Subview-Frame folgendermaßen aktualisieren:
statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
NSNotification.Name.UIApplicationWillChangeStatusBarOrientation
beobachtenviewWillLayoutSubviews()
überschreibenMit Swift 3 und 4 können Sie den Code-Snippet weiter unten verwenden. Es findet die Ansicht von UIApplication
mit valueForKeyPath
als Hintergrundfarbe.
guard let statusBarView = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else {
return
}
statusBarView.backgroundColor = UIColor.red
Ziel c
UIView *statusBarView = [UIApplication.sharedApplication valueForKeyPath:@"statusBarWindow.statusBar"];
if (statusBarView != nil)
{
statusBarView.backgroundColor = [UIColor redColor];
}
Für iOS 11 und Xcode 9 führen Sie die folgenden Schritte aus.
erstellen Sie eine Erweiterung für UIApplication class:
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
In Ihrer Klasse oder wo auch immer Sie die Hintergrundfarbe der Statusleiste ändern möchten:
UIApplication.shared.statusBarView?.backgroundColor = .red
Um hellen oder dunklen Inhalt der Statusleiste anzuzeigen, gehen Sie einfach zu Info.plist und fügen Sie die folgende Wertzeile mit WertNOhinzu.
Anzeige der Controller-basierten Statusleiste
Für Xcode 9 und iOS 11: Der Stil der Statusleiste, den wir zu erreichen versuchen, ist eine Statusleiste mit weißem Inhalt. Wechseln Sie zur Datei ViewController.Swift, und fügen Sie die folgenden Codezeilen hinzu.
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Oder über die Option Projekteinstellungen können Sie den Stil der Statusleiste ändern:
Gehen Sie als nächstes zurück zum Storyboard, wählen Sie View Controller aus und wählen Sie im Editor-Menü Select In Navigation Controller einbetten. Wählen Sie die Navigationsleiste aus und setzen Sie im Attribut-Inspektor die Farbe des Balkens auf Rot. Das Storyboard wird so aussehen .
Projekt erstellen und ausführen, Der Inhalt der Statusleiste ist wieder dunkel (Standardeinstellung). Der Grund dafür ist, dass iOS nach dem Stil der Statusleiste des Navigationscontrollers anstelle des enthaltenen Viewcontrollers gefragt hat.
Um den Stil aller Navigations-Controller in der App zu ändern, ändern Sie die folgende Methode in der AppDelegate.Swift-Datei.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().barStyle = .blackOpaque
return true
}
Erstellen Sie das Projekt erneut, und führen Sie es erneut aus. Diesmal hat sich der Inhalt der Statusleiste in Weiß geändert.
Versuche dies
Gehe zu deiner App info.plist
Gehen Sie dann zu Ihrem App-Delegaten, und fügen Sie den folgenden Code ein, an 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,[UIScreen mainScreen].bounds.size.width, 20)];
view.backgroundColor=[UIColor blackColor];
[self.window.rootViewController.view addSubview:view];
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any] ?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().barStyle = .blackOpaque
return true
}
Dies funktioniert für mich, da meine NavigationsleisteTintColor schwarz war und die Statusleiste nicht angezeigt wurde.
Wenn der Code über dem Code steht, wird die didFinishLaunch-Statusleiste weiß angezeigt.
Fügen Sie folgenden Code in Ihre Erweiterungsdatei ein, um Ihre Statusleiste in Swift 4 und höher) zu bearbeiten:
extension UIApplication {
var statusBarView: UIView? {
if responds(to: Selector(("statusBar"))) {
return value(forKey: "statusBar") as? UIView
}
return nil
}
}
jetzt können wir die Statusleiste bearbeiten, indem wir folgende Zeile in unsere ViewController-Klasse einfügen:
UIApplication.shared.statusBarView?.backgroundColor = <Your Color name>
ex: UIApplication.shared.statusBarView?.backgroundColor = .red
Hoffe, das wird hilfreich sein. Vielen Dank
Sie können die Hintergrundfarbe für die Statusleiste während des Anwendungsstarts oder während des viewDidLoad Ihres View-Controllers festlegen.
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:
Ich habe diese Erweiterung vorgenommen, um die Farbe der Statusleiste zu ändern. Es ist nicht vom Schlüssel abhängig. So ist es viel sicherer zu bedienen
public extension UIViewController {
func setStatusBar(color: UIColor) {
let tag = 12321
if let taggedView = self.view.viewWithTag(tag){
taggedView.removeFromSuperview()
}
let overView = UIView()
overView.frame = UIApplication.shared.statusBarFrame
overView.backgroundColor = color
overView.tag = tag
self.view.addSubview(overView)
}
}
Hier ist die Verwendung überall in viewcontroller:
setStatusBar(color: .red)
Die mögliche Lösung besteht darin, eine Ansicht hinzuzufügen, die als Hintergrund von statusBar auf Ihrem viewController verwendet wird:
let frame = screenController.view.convert(UIApplication.shared.statusBarFrame, to: screenController.view)
let backview = UIView(frame: frame)
backview.backgroundColor = backgroundColor
screenController.view.addSubview(backview)
screenController.view.bringSubviewToFront(backview)