如何在 iOS 10 中使导航栏透明

Posted

技术标签:

【中文标题】如何在 iOS 10 中使导航栏透明【英文标题】:How to make navigation bar transparent in iOS 10 【发布时间】:2016-06-24 18:40:17 【问题描述】:

我有以下代码使导航栏透明,但仍显示后退按钮,这适用于所有版本的 ios,但它停止使用 iOS 10 测试版

    navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    navigationBar.shadowImage = UIImage()
    navigationBar.isTranslucent = true

iOS 10 在这方面有什么变化吗?

请注意,它不能使用 navigationBar.isHidden,因为这会导致导航栏后退按钮和标题等也消失。

【问题讨论】:

【参考方案1】:

我不知道 iOS 10 中发生了什么变化以阻止以前的代码工作,但为了修复它,我创建了一个透明图像(它只需要一个像素的尺寸)并使用以下代码制作导航栏透明(但仍显示返回导航按钮)。

    let transparentPixel = UIImage(named: "TransparentPixel")
    navigationBar.setBackgroundImage(transparentPixel, for: UIBarMetrics.default)
    navigationBar.shadowImage = transparentPixel
    navigationBar.backgroundColor = UIColor.clear()
    navigationBar.isTranslucent = true

顺便说一句,如果要改变导航栏的颜色,可以使用同样的原理:

    let redPixel = UIImage(named: "RedPixel")
    navigationBar.setBackgroundImage(redPixel, for: UIBarMetrics.default)
    navigationBar.shadowImage = redPixel
    navigationBar.isTranslucent = false

【讨论】:

【参考方案2】:

@Essence 提供的解决方案完美运行! 这就是我用来通过代码创建 1px 透明图像的方法:

class MainClass: UIViewController 

  let transparentPixel = UIImage.imageWithColor(color: UIColor.clear)

  override func viewWillAppear(_ animated: Bool) 
    drawCustomNavigationBar()
  

  func drawCustomNavigationBar() 
    let nav = (self.navigationController?.navigationBar)!
    nav.setBackgroundImage(transparentPixel, for: UIBarMetrics.default)
    nav.shadowImage = transparentPixel
    nav.isTranslucent = true
  


extension UIImage 
  class func imageWithColor(color: UIColor) -> UIImage 
    let rect = CGRect(origin: CGPoint(x: 0, y:0), size: CGSize(width: 1, height: 1))
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()!

    context.setFillColor(color.cgColor)
    context.fill(rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image!
  

【讨论】:

【参考方案3】:

Swift 3.x

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = .clear
self.navigationController?.navigationBar.isTranslucent = true

【讨论】:

以上是关于如何在 iOS 10 中使导航栏透明的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中使底部导航栏不透明?

如何在 Swift 中使 iPhone 状态栏透明?

如何使导航栏透明?

如何在 iOS 7 中制作完全透明的导航栏

在 ios 7 中制作透明导航栏和透明标签栏。

你如何制作一个彩色和半透明的导航栏(iOS)?