Как изменить альфа-версию строки состояния в iOS 13?

Я хочу изменить альфа-версию строки состояния в iOS 13.

let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow?.alpha = 0.5

Когда я пытаюсь это сделать, приложение вылетает (поток 1: сигнал SIGABRT).


person Benjamin Hutter    schedule 17.07.2019    source источник
comment
Насколько я знаю, вы не можете этого сделать. Строка состояния может быть черной или белой. Вы пытаетесь получить доступ к частному API, который, я думаю, Apple не разрешит, если вы отправляете данные в App Store.   -  person Chris    schedule 17.07.2019


Ответы (3)


Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Приложение называется -statusBar или -statusBarWindow в UIApplication: этот код необходимо изменить, поскольку больше нет строки состояния или окна строки состояния. Вместо этого используйте объект statusBarManager в сцене окна. '

Вы можете обратиться к следующему ответу, чтобы устранить сбой.

var statusBarUIView: UIView? {
        if #available(iOS 13.0, *) {
            let tag = 38482458
            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
    }

Эти упомянутые решения сработали для меня.

person Akshar Darji    schedule 09.09.2019
comment
Вы просто добавляете пустой UIView в случае iOS 13, как это будет работать с конкретными свойствами StatusBar, например. foregroundColor? - person ViruMax; 16.09.2019
comment
Здесь я только предоставил решение для сбоя, я думаю, мы изменим цвет и альфа из этого statusBarUIView var. - person Akshar Darji; 20.09.2019
comment
@AksharDarji keyWindow устарел в iOS 13. - person Parth Adroja; 22.10.2019
comment
@ParthAdroja Верно. Однако мы протестировали бета-версию, и тогда она работала нормально. В любом случае, если вы хотите его использовать, вы можете проверить stackoverflow.com/a/57169802/2677134 или внести свой вклад здесь для того же. - person Akshar Darji; 22.10.2019
comment
Вы просто добавляете пустой UIView в случае iOS 13 - person Habib Ali; 26.11.2019

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

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

person Douglas Hill    schedule 16.08.2019

У меня есть собственное решение для изменения строки состояния на iOS 13 и ниже. Вот как это сделать:

if #available(iOS 13.0, *) {
   let app = UIApplication.shared
   let statusBarHeight: CGFloat = app.statusBarFrame.size.height

   let statusbarView = UIView()
   statusbarView.backgroundColor = UIColor.red
   view.addSubview(statusbarView)

   statusbarView.translatesAutoresizingMaskIntoConstraints = false
   statusbarView.heightAnchor
     .constraint(equalToConstant: statusBarHeight).isActive = true
   statusbarView.widthAnchor
     .constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
   statusbarView.topAnchor
     .constraint(equalTo: view.topAnchor).isActive = true
   statusbarView.centerXAnchor
     .constraint(equalTo: view.centerXAnchor).isActive = true

} else {
      let statusBar = UIApplication.shared.value(forKeyPath: 
   "statusBarWindow.statusBar") as? UIView
      statusBar?.backgroundColor = UIColor.red
}

Gist

Также ознакомьтесь со статьей iOS 13 Как изменить Цвет строки состояния?

И последнее, вы все еще можете изменить стиль строки состояния с помощью:

 override var preferredStatusBarStyle : UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
    //return UIStatusBarStyle.default   // Make dark again
}
person FreakyCoder    schedule 29.09.2019