如何使导航栏和状态栏模糊(UIBlurEffect)? iOS,Swift 3

如何使导航栏和状态栏模糊(UIBlurEffect)? 当我点击图片向下滚动(滚动视图)到其他图片时,这个图片(在这个例子中是一个白色的机器)在导航栏下简单地丢失了,这个graphics是必须的与UIBlurEffect效果的导航栏。

没有UIBlurEffect

我已经尝试过,但没有工作:

func addBlurEffect() { // Add blur view let bounds = self.navigationController?.navigationBar.bounds as CGRect! let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light)) visualEffectView.frame = bounds! visualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] self.navigationController?.navigationBar.addSubview(visualEffectView) self.navigationController?.navigationBar.sendSubview(toBack: visualEffectView) visualEffectView.isUserInteractionEnabled = false } 

首先,当滚动图片在导航栏下消失。
其次,状态栏保持灰色。

NavigationBar坏的UIBlurEffect和StatusBar没有UIBlurEffect

为了状态栏不能保持灰色,我试图做到这一点,但无济于事

 bounds.offsetBy(dx: 0.0, dy: -20.0) bounds.size.height = bounds.height + 20.0 

另外在didFinishLaunchingWithOptions中的AppDelegate(他用Objective-C编写的应用程序)中,我试图添加它们都保持不变:

 [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setShadowImage:[[UIImage alloc]init]]; [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f]]; [[UINavigationBar appearance] setTranslucent:YES]; 

请帮忙解决这个问题,我把它弄了三天。
对不起,我的英语不好。

将背景图像设置到导航栏上就可以了。 在swift 3下面的代码为我工作。

  let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light)) visualEffectView.frame = (self.navigationController?.navigationBar.bounds.insetBy(dx: 0, dy: -10).offsetBy(dx: 0, dy: -10))! self.navigationController?.navigationBar.isTranslucent = true self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.addSubview(visualEffectView) 

输出:

在这里输入图像说明

Swift 3

感谢@Vignesh的回答和@Romain Caron的评论,我将你的代码和下面的代码合在一起,在Swift 3中

  let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light)) visualEffectView.frame = (self.navigationController?.navigationBar.bounds.insetBy(dx: 0, dy: -10).offsetBy(dx: 0, dy: -10))! self.navigationController?.navigationBar.isTranslucent = true self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.addSubview(visualEffectView) self.navigationController?.navigationBar.sendSubview(toBack: visualEffectView)