【问题标题】:UIBlurEffect on StatusBar only (not on UINavigationBar)UIBlurEffect 仅在 StatusBar 上(不在 UINavigationBar 上)
【发布时间】:2023-04-05 18:10:01
【问题描述】:

与此类似: How to make a Navigation Bar and Status Bar blurred (UIBlurEffect)? iOS, Swift 3

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

【问题讨论】:

标签: ios swift uikit uinavigationbar uistatusbar


【解决方案1】:

您可以通过以下代码获取您的状态栏视图,然后尝试添加到视觉效果,如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)

【讨论】:

  • 添加 UIBlurEffect 很容易,谢谢。
  • 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“在 UIApplication 上调用 -statusBar 或 -statusBarWindow 的应用程序:必须更改此代码,因为不再有状态栏或状态栏窗口。在窗口场景中使用 statusBarManager 对象。
  • @Sentry.co 请检查更新的代码
【解决方案2】:
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)

试试这个

【讨论】:

    【解决方案3】:

    iOS 14/iOS 13 解决方案:您可以通过 viewDidLoad 中的以下代码来获得 statusBar 模糊效果:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-22
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多