iOS Custom Status Bar Background Color not displaying

后端 未结 9 1818
别那么骄傲
别那么骄傲 2020-12-16 13:30

I am trying to fill the status bar background color to orange using the following

UINavigationBar.appearance().tintColor = UIColor.orangeColor()
UINavigation         


        
相关标签:
9条回答
  • 2020-12-16 13:53

    Edit for Swift 3:

    With UITabBarController

    let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 20.0))
    view.backgroundColor = .orange
    self.view.addSubview(view)
    

    Without embedded controllers

    I realize some people come here not only for the status bar, but actually the navigation bar, so I learned a few tricks along the way to do it without any embedded controllers:

    Add this method in your AppDelegate.swift and call it in the didFinishLaunchingWithOptions

    func customizeAppearance() {
        UINavigationBar.appearance().barTintColor = UIColor.black
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
        UITabBar.appearance().barTintColor = UIColor.black
        let tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)
    
        UITabBar.appearance().tintColor = tintColor
    }
    

    Thanks to @Utsav I added the following subview to my UITabBarController and this seems to be working now:

        let view = UIView(frame:
                        CGRect(x: 0.0, y: 0.0, width: UIScreen.mainScreen().bounds.size.width, height: 20.0)
                    )
        view.backgroundColor = UIColor.orangeColor()
    
        self.view.addSubview(view)
    

    The UITabBarController doesn't seem to play well in AppDelegate. If anyone has a better way let me know but, as of now this is the solution I have come around to.

    0 讨论(0)
  • 2020-12-16 13:53

    Add this code in didFinishLaunchingWithOptions in AppDelegate

    let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.mainScreen().bounds.size.width, height: 20.0))
    view.backgroundColor=UIColor.orangeColor()
    self.window.rootViewController.view.addSubview(view)
    

    Hope it helps you....!!!

    0 讨论(0)
  • 2020-12-16 13:53

    I think your last line is reverting your changes, try this:

    override func viewWillAppear(animated: Bool) {
    UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
            super.viewWillAppear(animated)
            var nav = self.navigationController?.navigationBar
            nav?.barStyle = UIBarStyle.Black
            nav?.tintColor = UIColor.orangeColor()
            nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
        }
    
    0 讨论(0)
  • 2020-12-16 13:56

    After what u did in info.plist to the following: View controller-based status bar appearance => NO.

    Add this code in AppDelegate.swift file under didFinishLaunchingWithOptions:

    var navigationBarAppearace = UINavigationBar.appearance()
    
    navigationBarAppearace.tintColor = uicolorFromHex(0xffffff)
    navigationBarAppearace.barTintColor = uicolorFromHex(0x2E9AFE)
    
    // change navigation item title color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
    
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
    

    and u can select any hex code for ur choice of color..!! Enjoy..!!

    Sorry, forgot to use hexcode you will be needing this also so add this code anywhere in your AppDelegate.swift:

    func uicolorFromHex(rgbValue:UInt32)->UIColor {
    
        let red = CGFloat((rgbValue & 0xFF0000) >> 16)/256.0
    
        let green = CGFloat((rgbValue & 0xFF00) >> 8)/256.0
    
        let blue = CGFloat(rgbValue & 0xFF)/256.0
    
        return UIColor(red:red, green:green, blue:blue, alpha:1.0)
    }
    
    0 讨论(0)
  • 2020-12-16 13:57

    There is a main difference in tintColor and changing the background color of UINavigationBar. The best way in my opinion is apply a background image, made by 1 pixel square image of just one color.
    Like that:

    let tabbarAndNavBarBkg = UIImage(named: "nav_tab")
    UINavigationBar.appearance().setBackgroundImage(tabbarAndNavBarBkg, forBarMetrics: .Default) 
    

    Or you can create a category on UIColor to return a UIImage given a UIColor instance, in objC:

    + (UIImage *) imageWithColor:(UIColor*) color {
        CGRect rect = CGRectMake(0, 0, 1, 1);
        UIGraphicsBeginImageContext(rect.size);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetFillColorWithColor(context, color.CGColor);
        CGContextFillRect(context, rect);
        UIImage *colorImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return colorImage;
    }
    
    0 讨论(0)
  • 2020-12-16 13:58

    Swift 3:

    In your AppDelegate.swift file paste the code bellow into your didFinishLaunchingWithOptions method:

    let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.size.width, height: 20.0))
    view.backgroundColor = UIColor(red: 255/255, green: 130/255, blue: 0/255, alpha: 1.0) // Organge colour in RGB
    self.window?.rootViewController?.view.addSubview(view)
    

    This works fine for me!

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