Как затемнить строку состояния в iOS 13 - PullRequest
0 голосов
/ 24 сентября 2019

Я работал над приложением для iOS, которое до появления iOS 13 могло «затемнять» строку состояния при появлении всплывающего окна. Это было просто сделано путем добавления представления с границами в качестве строки состояния и примененияальфа .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 до .5. Однако,в iOS 13 это больше не работает. Мне просто интересно, можно ли вообще это сделать, потому что в другом потоке я прочитал, что нативные приложения для iOS также удалили эту возможность:

Строка состояния отображается системным процессом (вне процесса приложения) в iOS 13, поэтому приложение не может изменить это (источник: общение с инженерами UIKit в лабораториях WWDC 2019).

Это можно увидеть в приложении Apple Books, которое использовало для затемнения строки состояния в темном режиме на iOS 12, но на iOS 13 этого не происходит.

Myвопрос отличается от одногоупоминалось выше, хотя, потому что вопрос заключается в том, чтобы редактировать альфу самой строки состояния, в то время как я был бы рад использовать наложение вместо этого.Будем благодарны за любые предложения по достижению желаемого результата.

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете попробовать создать другой экземпляр UIWindow и установить для его свойства level значение statusBar или alert.

. Связывание документации Apple по уровням UIWindow: https://developer.apple.com/documentation/uikit/uiwindow/level/

...