I am trying to make my UINavigationBar
in UINavigationController
transparent. I created a subclass of UINavigationController
and liked it to a scene in my storyboard file. Here's a piece of my subclass:
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. let size = self.navigationBar.frame.size self.navigationBar.setBackgroundImage(imageWithColor(UIColor.blackColor(), size: size, alpha: 0.2), forBarMetrics: UIBarMetrics.Default) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func imageWithColor(color: UIColor, size: CGSize, alpha: CGFloat) -> UIImage { UIGraphicsBeginImageContext(size) let currentContext = UIGraphicsGetCurrentContext() let fillRect = CGRectMake(0, 0, size.width, size.height) CGContextSetFillColorWithColor(currentContext, color.CGColor) CGContextSetAlpha(currentContext, alpha) CGContextFillRect(currentContext, fillRect) let retval: UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return retval }
When I run my application a have a navigation bar transparent, but status bar is just black.
For example if I do such thing on UITabBar
- it works.
You need to do three things to make a navigation bar transparent. Set background image to non-nil empty image ( UIImage() ). Set shadow image to non-nil empty image ( UIImage() ). Set isTranslucent to true .
A Boolean value that indicates whether the navigation bar is translucent.
Hope it help you
Swift 2:
self.navigationController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController.navigationBar.shadowImage = UIImage() self.navigationController.navigationBar.isTranslucent = true self.navigationController.view.backgroundColor = UIColor.clearColor()
Swift 4.2 to Swift 5.1
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isTranslucent = true self.navigationController?.view.backgroundColor = UIColor.clear
Or If you want to sublcass the navigation controller then refer this answer.
Change the status bar style via :
In your Info.plist you need to define View controller-based status bar appearance to any value.
UIApplication.shared.statusBarStyle = .lightContent
If you want to hide the status bar:
UIApplication.shared.isStatusBarHidden = true
Getting this output by light content and by transparent navigation. I have view background is gray. you can see the transparency.
iPhone XR - Swift 4.2 - Large Titles (Test Screenshot)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With