簡體   English   中英

導航欄的實時模糊效果-狀態欄無法進入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM