UIBlurEffect 仅在 StatusBar 上(不在 UINavigationBar 上)

UIBlurEffect on StatusBar only (not on UINavigationBar)

与此类似:

但我们只想将 UIBlurEffect 应用于 StatusBar,而不是导航栏。这可能吗?

你可以通过下面的代码得到你的statusBar视图,然后尝试像here

那样添加视觉效果
     let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
        let statusBar = statWindow.subviews[0] as UIView
//        statusBar.backgroundColor = UIColor(red: 23 / 255.0, green: 0 / 255.0, blue: 154 / 255.0, alpha: 0.7)
        statusBar.backgroundColor = UIColor(red: 213 / 255.0, green: 0 / 255.0, blue: 0 / 255.0, alpha: 0.7)
let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
    let statusBar = statWindow.subviews[0] as UIView
    statusBar.backgroundColor = UIColor.clear
    let blur = UIBlurEffect(style:.dark)
    let visualeffect = UIVisualEffectView(effect: blur)
    visualeffect.frame = statusBar.frame
    //statusBar.addSubview(visualeffect)
    visualeffect.alpha = 0.5
    self.view.addSubview(visualeffect)

试试这个

iOS 14/iOS 13 解决方案: 你可以得到你的statusBar模糊效果,在你的viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()

let blurryEffect = UIBlurEffect(style: .regular)
    let blurredStatusBar = UIVisualEffectView(effect: blurryEffect)
    blurredStatusBar.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(blurredStatusBar)
    blurredStatusBar.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    blurredStatusBar.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    blurredStatusBar.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    blurredStatusBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true }

Sample Image