关注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)
}
但状态栏仍然是半透明的:
如何解决?
调试:
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)
答案 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)
}