it-swarm.com.de

Hintergrundfarbe der Statusleiste in Swift ändern 3

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?

35
derdida
extension UIApplication {
    var statusBarView: UIView? {
        if responds(to: Selector("statusBar")) {
            return value(forKey: "statusBar") as? UIView
        }
        return nil
    }
}

UIApplication.shared.statusBarView?.backgroundColor = .red
126
Callam

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:

  • Verwenden der Maske zur automatischen Größenänderung: statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] 
  • NSNotification.Name.UIApplicationWillChangeStatusBarOrientation beobachten
  • Oder viewWillLayoutSubviews() überschreiben
38
Daniel Illescas

Mit 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];
}
21
abdullahselek

Für iOS 11 und Xcode 9 führen Sie die folgenden Schritte aus. 

  1. erstellen Sie eine Erweiterung für UIApplication class:

    extension UIApplication { var statusBarView: UIView? { return value(forKey: "statusBar") as? UIView } }

  2. In Ihrer Klasse oder wo auch immer Sie die Hintergrundfarbe der Statusleiste ändern möchten:

    UIApplication.shared.statusBarView?.backgroundColor = .red

  3. 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

  1. Stellen Sie nun einfach den Lichtinhalt oder was auch immer Sie benötigen auf der Registerkarte Allgemein der Einstellungen Ihres Projekts ein.
5
Asfand Shabbir

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:

 enter image description here

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 .  enter image description here

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.

 enter image description here

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.

 enter image description here

4

Versuche dies

Gehe zu deiner App info.plist  

  1. Setzen Sie View Controller-basierte Statusleiste auf NO 
  2. Setzen Sie den Statusleistenstil auf UIStatusBarStyleLightContent

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];
}
3
iOSDev
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.

2
ioSana

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

0
Ishant IOS

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:

enter image description here

0
Krunal

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)

0
Rifat Monzur

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)
0
Daniil Chuiko