导航栏的实时模糊效果 - 状态栏无法进入
Real time blur effect for Navigation Bar - Status bar not getting in
按照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)
部分原因是您将视觉效果视图的框架设置为导航栏的边界。您在屏幕截图中看到的 是 导航栏的边界。因此,您可以通过为您的视觉效果视图提供不同的框架来进行补偿,即将其原点向上移动 20 点并增加其高度。
不过,我有点不清楚为什么不直接将导航栏设为半透明。导航栏半透明是模糊效果,支持。您正在做的事情——向导航栏添加子视图——不是。
设法让它工作添加这个:
bounds.offsetInPlace(dx: 0.0, dy: -20.0)
bounds.size.height = bounds.height + 20.0
关于这个问题,我修改了Kampai早前的回答,原贴是here。
下面的代码会模糊状态栏和导航栏。
Swift 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)
}
按照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)
部分原因是您将视觉效果视图的框架设置为导航栏的边界。您在屏幕截图中看到的 是 导航栏的边界。因此,您可以通过为您的视觉效果视图提供不同的框架来进行补偿,即将其原点向上移动 20 点并增加其高度。
不过,我有点不清楚为什么不直接将导航栏设为半透明。导航栏半透明是模糊效果,支持。您正在做的事情——向导航栏添加子视图——不是。
设法让它工作添加这个:
bounds.offsetInPlace(dx: 0.0, dy: -20.0)
bounds.size.height = bounds.height + 20.0
关于这个问题,我修改了Kampai早前的回答,原贴是here。
下面的代码会模糊状态栏和导航栏。
Swift 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)
}