[英]Real time blur effect for Navigation Bar - Status bar not getting in
遵循此問題以在導航欄中獲得實時模糊效果:
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的早期答案,該答案已在此處發布。
下面的代碼將模糊狀態欄和導航欄。
斯威夫特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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.