Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Transparent UINavigationBar in Swift

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.

like image 709
Nikita Zernov Avatar asked May 30 '15 11:05

Nikita Zernov


People also ask

How do you make a navigation bar transparent in Swift?

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 .

What is isTranslucent?

A Boolean value that indicates whether the navigation bar is translucent.


1 Answers

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.

enter image description here

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.

enter image description here

iPhone XR - Swift 4.2 - Large Titles (Test Screenshot)

Large Titles - Swift - iPhone XR

like image 136
Ashish Kakkad Avatar answered Oct 14 '22 17:10

Ashish Kakkad