簡體   English   中英

如何使 iOS 13 中的狀態欄變暗

[英]How to dim status bar in iOS 13

我一直在研究 iOS 應用程序,在 iOS 13 之前,當彈出窗口出現時能夠“變暗”狀態欄。這只是通過添加一個帶有邊界的視圖作為狀態欄並應用 a.5阿爾法到它:

lazy var fadeStatusBar: UIView = {
    let fadeStatusBar = UIView(frame: UIApplication.shared.statusBarView?.frame ?? UIApplication.shared.statusBarFrame)
    fadeStatusBar.backgroundColor = UIColor.black
    fadeStatusBar.alpha = 0
    fadeStatusBar.translatesAutoresizingMaskIntoConstraints = false
    return fadeStatusBar
}()

其中statusBarView是 UIApplication 的擴展:

extension UIApplication {
    var statusBarView: UIView? {
        if #available(iOS 13.0, *) {
            let tag = 38482458385
            if let statusBar = self.keyWindow?.viewWithTag(tag) {
                return statusBar
            } else {
                let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
                statusBarView.tag = tag

                self.keyWindow?.addSubview(statusBarView)
                return statusBarView
            }
        } else {
            if responds(to: Selector(("statusBar"))) {
                return value(forKey: "statusBar") as? UIView
            }
        }
        return nil
    }
}

然后我可以將fadeStatusBar alpha 屬性設置為.5。 但是,這在 iOS 13 中不再起作用。我只是想知道它是否仍然可以完成,因為我在另一個線程中讀到本機 iOS 應用程序也刪除了此功能:

狀態欄由 iOS 13 上的系統進程(應用程序進程外)呈現,因此應用程序無法更改它。 (資料來源:與 WWDC 2019 實驗室的 UIKit 工程師交談。)

您可以在 Apple Books 應用程序中看到這一點,該應用程序曾經在 iOS 12 上的黑暗模式下使狀態欄變暗,但在 iOS 13 上不會發生這種情況。

不過,我的問題與上面提到的問題不同,因為那里的問題是編輯狀態欄本身的 alpha,而我很樂意使用覆蓋視圖。 任何實現預期結果的建議將不勝感激。

您可以嘗試創建另一個UIWindow實例並將其level屬性設置為statusBaralert

鏈接 Apple 關於UIWindow級別的文檔:https://developer.apple.com/documentation/uikit/uiwindow/level/

您可以添加視圖並使其變暗並將其作為子視圖添加到狀態欄,如下所示:

// Dim status bar
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
let wFrame = window?.windowScene?.statusBarManager?.statusBarFrame
let statusBarView = UIView(frame: wFrame!)
statusBarView.restorationIdentifier = "statusBarView"
statusBarView.backgroundColor = UIColor.black.withAlphaComponent(0.6)
window?.addSubview(statusBarView)

如果您想恢復它,您可以執行以下操作:

// Revert status bar back to normal
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
for subview in window!.subviews {
    if subview.restorationIdentifier == "statusBarView" {
        subview.removeFromSuperview()
    }
}

暫無
暫無

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

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