如何让 swift 中的导航栏透明?

How do I make my navigation bar transparent in swift?

我想把我的导航控制器做成这样。我的主要观点应该继续到顶部。

但是当我尝试实施它时,我得到了这个结果:

我该如何处理这个问题。我想在第一张图片中实现类似的东西。有人可以帮忙吗?谢谢

这里有一些代码可以帮助您开始。你正在做的是创建一个 UIVisualEffectView 来模糊一些东西,然后你将它设置为 navBar.

的子视图
func addBlurEffect() {
    let bounds = self.navigationController?.navigationBar.bounds as CGRect!
    let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
    visualEffectView.frame = bounds
    visualEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    navigationController?.navigationBar.addSubview(visualEffectView)
}

由于您的视图中已有标题和按钮,您似乎想要隐藏导航栏而不是使其透明。如果您不想在任何屏幕上显示导航栏,您可以取消选中 Storyboard 中的 'Shows Navigation Bar'。

或者,如果你只想在某些屏幕上隐藏导航栏,你可以在viewDidLoad()中设置

navigationController?.setNavigationBarHidden(true, animated: true)

您的自动版式似乎设置为上边距而不是视图顶部。您还应该像 AppDelegate

中那样更改状态栏
UIApplication.sharedApplication().statusBarStyle = .LightContent

我在我的应用程序中使用它来使我的导航栏透明(如果导航栏在 UINavigationController 中):

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

现在您仍然可以向导航栏添加按钮和标题。

编辑:Swift 3(感谢 DrBreakalot)

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