导航栏的实时模糊效果 - 状态栏无法进入

时间:2015-10-11 16:23:58

标签: ios swift uinavigationcontroller uinavigationbar

关注this question以获得导航栏中的实时模糊效果:

func addBlurEffect() {
var bounds = self.navigationController?.navigationBar.bounds as CGRect!
var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
visualEffectView.frame = bounds
visualEffectView.autoresizingMask = .FlexibleHeight | .FlexibleWidth
self.navigationController?.navigationBar.addSubview(visualEffectView)
}

但状态栏仍然是半透明的:

enter image description here

如何解决?

调试:

    print(self.navigationController?.navigationBar.bounds)
    // Returns (0.0, 0.0, 320.0, 44.0)

    print(UIApplication.sharedApplication().statusBarFrame)
    // Returns (0.0, 0.0, 320.0, 20.0)

3 个答案:

答案 0 :(得分:2)

部分原因是您将视觉效果视图的框架设置为导航栏的边界。你在屏幕截图中看到的是导航栏的界限。因此,您可以通过为视觉效果视图提供不同的帧来进行补偿,即将其原点移动20点并增加其高度。

但是,我有点不清楚,为什么你不只是让导航栏半透明。导航栏半透明 模糊效果,并且支持它。您正在做的事情 - 在导航栏中添加子视图 - 不是。

答案 1 :(得分:1)

管理让它工作添加:

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

答案 2 :(得分:0)

关于这个问题,我修改了Kampai的先前答案,该答案原帖发布于here

下面的代码会使状态栏和导航栏模糊。

迅速4:

func navigationBarBlur() {
    let bounds = CGRect(x: 0.0, y: -20.0, width: UserDefaults.screenWidth, height: (self.navigationController?.navigationBar.bounds.size.height)! + 20.0)
    let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
    self.visualEffectView = visualEffectView
    visualEffectView.frame = bounds
    visualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.navigationController?.navigationBar.addSubview(visualEffectView)
}