在Swift iOS 8中设置透明导航栏和状态栏的图像参考底图

我是iOS快速开发的新手,我遇到了一个问题。 我想设置透明导航栏并使透明导航栏和状态栏的图像底层如下图所示,

在此处输入图像描述

但在我实现以下代码后,

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController!.navigationBar.shadowImage = UIImage() self.navigationController!.navigationBar.translucent = true 

结果是图像仍然在导航栏和状态栏下方,即使我将导航栏设置为透明。

在此处输入图像描述

我尝试过与您提供的代码相同的代码:

 override func viewDidLoad() { super.viewDidLoad() self.navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController!.navigationBar.shadowImage = UIImage() self.navigationController!.navigationBar.translucent = true } 

它工作正常,你可以在这里看到结果:

在此处输入图像描述

检查我的示例项目,找出你遗漏的内容。

希望它会有所帮助。

如果您没有使用默认导航栏,则将您从背景图像视图移动到状态栏下方20px,从顶部约束开始,然后使用以下方法清除状态栏背景颜色:

  override func viewDidLoad() { super.viewDidLoad() let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView statusBar?.backgroundColor = UIColor.clear } 

如果要将状态栏项目颜色更改为白色,请使用:

  override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 

输出将是 在此处输入图像描述

我通过为状态栏背景设置透明UIColor来解决这个问题。

  guard let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else { return } statusBar.backgroundColor = UIColor(red: 2, green: 200.0, blue: 200, alpha: 0) // color value has no effect. Only alpha value is needed to make it transparent 

根据Dharmesh的回答,但更新了Swift 4

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