Я работал над приложением для 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вопрос отличается от одногоупоминалось выше, хотя, потому что вопрос заключается в том, чтобы редактировать альфу самой строки состояния, в то время как я был бы рад использовать наложение вместо этого.Будем благодарны за любые предложения по достижению желаемого результата.