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

时间:2016-06-24 18:40:17

标签: ios swift uinavigationbar

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

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

iOS 10在这方面有变化吗?

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

3 个答案:

答案 0 :(得分:10)

我不知道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

答案 1 :(得分:6)

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

答案 2 :(得分:0)

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