Change Status Bar Background Color in Swift 3

前端 未结 14 1551
挽巷
挽巷 2020-11-28 04:21

In XCode 7.3.x ill changed the background Color for my StatusBar with:

func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = UIApplicatio         


        
相关标签:
14条回答
  • 2020-11-28 04:49

    write this in first view controller:

    UIApplication.shared.statusBarUIView?.backgroundColor = .white
    
    
    
    
    
    
    extension UIApplication {
        var statusBarUIView: UIView? {
            if #available(iOS 13.0, *) {
                let tag = 38482458385
                if let statusBar = self.keyWindow?.viewWithTag(tag) {
                    return statusBar
                } else {
                    let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
                    statusBarView.tag = tag
    
                    self.keyWindow?.addSubview(statusBarView)
                    return statusBarView
                }
            } else {
                if responds(to: Selector(("statusBar"))) {
                    return value(forKey: "statusBar") as? UIView
                }
            }
            return nil
        }
    }
    
    0 讨论(0)
  • 2020-11-28 04:52

    You can set background color for status bar during application launch or during viewDidLoad of your view controller.

    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
        }
    
    }
    



    Here is result:

    enter image description here

    0 讨论(0)
  • 2020-11-28 04:56
    extension UIApplication {
        var statusBarView: UIView? {
            if responds(to: Selector(("statusBar"))) {
                return value(forKey: "statusBar") as? UIView
            }
            return nil
        }
    }
    
    UIApplication.shared.statusBarView?.backgroundColor = .red
    

    Update for iOS 13

    App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window. Use the statusBarManager object on the window scene instead.

    Refer to How to change the status bar background color and text color on iOS 13?

    0 讨论(0)
  • 2020-11-28 04:56

    For Xcode 9 and iOS 11: The style of the status bar we will try to achieve is a status bar with white content. Go to the ViewController.swift file and add the following lines of code.

    override var preferredStatusBarStyle: UIStatusBarStyle {
    
         return .lightContent
    
    }
    

    Or from project settings option you can change status bar's style:

    Next, go back to the Storyboard, Select the View Controller and in the Editor menu Select Embed in Navigation Controller. Select the Navigation Bar and in the Attribute Inspector set the Bar Tint color to red. The Storyboard will look like this.

    Build and Run the project, The content of the status bar is dark again, which is the default. The reason for this is, iOS asked for the style of the status bar of the navigation controller instead of the contained view controller.

    To change the style of all navigation controller inside the app, change the following method in the AppDelegate.swift file.

      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
    
        UINavigationBar.appearance().barStyle = .blackOpaque
        return true
        }
    

    Build and Run the Project again, this time the content of the status bar changed to white.

    0 讨论(0)
  • 2020-11-28 04:59

    With using Swift 3 and 4 you can use the code snippet on below. It finds the view from UIApplication using valueForKeyPath as set it's background color.

    guard let statusBarView = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else {
            return
        }
    statusBarView.backgroundColor = UIColor.red
    

    Objective-C

    UIView *statusBarView = [UIApplication.sharedApplication valueForKeyPath:@"statusBarWindow.statusBar"];
    if (statusBarView != nil)
    {
        statusBarView.backgroundColor = [UIColor redColor];
    }
    
    0 讨论(0)
  • 2020-11-28 04:59
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any] ?) -> Bool {
        // Override point for customization after application launch.
    
        UINavigationBar.appearance().barStyle = .blackOpaque
        return true
    }
    

    This works for me, as my navigation barTintColor was black and unable to see the status bar.

    When set above code it didFinishLaunch status bar appears in white.

    0 讨论(0)
提交回复
热议问题