Цвет фона строки состояния IOS13 не меняется на прозрачный после установки - PullRequest
1 голос
/ 06 февраля 2020

(IOS13) Я пытаюсь реализовать функциональность, которая отображает панель навигации и строку состояния постепенно после прокрутки вниз страницы (со следующим кодом):

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    var offset = scrollView.contentOffset.y / 150
    print(offset)
    if offset > 1 { // show navigation bar

        offset = 1
        let color = UIColor.init(red: 1, green: 1, blue: 1, alpha: offset)

        self.navigationController?.navigationBar.barStyle = .default
        self.navigationController?.navigationBar.tintColor = UIColor(hue: 1, saturation: offset, brightness: 1, alpha: 1)
        self.navigationController?.navigationBar.backgroundColor = color
        navigationController?.setStatusBar(backgroundColor: color)


    } else { // hide navigation bar

        let color = UIColor.init(red: 1, green: 1, blue: 1, alpha: offset)

        self.navigationController?.navigationBar.tintColor = UIColor(hue: 1, saturation: offset, brightness: 1, alpha: 1)
        self.navigationController?.navigationBar.backgroundColor = color
         navigationController?.setStatusBar(backgroundColor: color)

        self.navigationController?.navigationBar.barStyle = .black

    }
}

Панель навигации работает отлично. Однако строка состояния не меняется на прозрачный цвет, когда я возвращаюсь назад. [Снимки экрана ниже]

Начальное состояние

Немного прокрутки

Прокрутка назад к исходному состоянию

Я использовал этот кусок кода, чтобы обновить цвет строки состояния:

extension UINavigationController {

func setStatusBar(backgroundColor: UIColor) {
    let statusBarFrame: CGRect
    if #available(iOS 13.0, *) {
        statusBarFrame = view.window?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero
    } else {
        statusBarFrame = UIApplication.shared.statusBarFrame
    }
    let statusBarView = UIView(frame: statusBarFrame)
    statusBarView.backgroundColor = backgroundColor
    view.addSubview(statusBarView)
}

}

...