簡體   English   中英

如何獲得對 iOS 13+ 中狀態欄的引用?

[英]How do I get a reference to the status bar in iOS 13+?

我正在嘗試像在 Apple Maps 中一樣模糊狀態欄。 我在互聯網上找到了一些解決方案,但它們至少都有幾年的歷史了,並引用了已棄用的屬性,所以我一直試圖提出一個適用於 iOS 13+ 的解決方案,沒有任何警告.

這是我嘗試過的:

func blurStatusBar() {
    let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow })
    if let statusBarFrame = window?.windowScene?.statusBarManager?.statusBarFrame {
        let blurEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
        blurEffectView.frame = statusBarFrame
        view.addSubview(blurEffectView)
    }
}

但是,這不起作用。 使用調試器,我可以看到windownil ,因此似乎沒有設置為關鍵窗口的窗口。

如果我使用let statusBarFrame = UIApplication.shared.statusBarFrame ,它可以工作,但是我收到一個警告: ViewController.swift:66:51: 'statusBarFrame' was deprecated in iOS 13.0: Use the statusBarManager property of the window scene instead.

我正在從我的初始視圖控制器調用viewDidLoad的上述函數。 這是我應該在我的場景委托而不是視圖控制器中做的事情嗎?

就像喜劇一樣,時機就是一切。 viewDidLoad太快了。 您的視圖控制器有一個視圖,但該視圖不一定在窗口中,也不一定有關鍵窗口。 等到初始界面層次結構組裝完成后,直到viewDidLayoutSubviews之類的東西(並添加檢查以確保您不會兩次運行相同的代碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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