Как установить стиль строки состояния, встроенной в контроллер навигации на iOS13? - PullRequest
1 голос
/ 27 сентября 2019

как много разработчиков iOS, я столкнулся с некоторыми проблемами при обновлении iOS 13.Одним из них было различное управление стилем строки состояния

В iOS 12 я использовал для установки стиля панели навигации, подобного этому

self.navigationController?.navigationBar.barStyle = .black

, который влияет на стиль строки состояния, устанавливая его вбелый (потому что стиль панели навигации черный);но, похоже, он не работает на iOS 13, я думаю, у него есть что-то, связанное с

UINavigationBarAppearance() 

class

Я настроил свою панель навигации для каждого ViewController следующим образом:

if #available(iOS 13.0, *) {
            let navBarAppearance = UINavigationBarAppearance()
            navBarAppearance.configureWithOpaqueBackground()
            navBarAppearance.accessibilityTextualContext = .sourceCode
            navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
            navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
            navBarAppearance.backgroundColor = .brownCircles
            navBarAppearance.shadowImage = nil // remove navigationBar Bottom border
            navBarAppearance.shadowColor = nil // remove navigationBar Bottom border

            self.navigationController?.navigationBar.standardAppearance = navBarAppearance
            self.navigationController?.navigationBar.compactAppearance = navBarAppearance
            self.navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance

        } else {
            self.navigationController?.navigationBar.barTintColor = .blue
            self.navigationItem.title = NSLocalizedString(kTitle, comment: kTitle.capitalized)
        }
self.navigationController?.navigationBar.barStyle = .black

пока все хорошо, но

self.navigationController?.navigationBar.barStyle = .black

работает только на iOS 12, на iOS 13 ничего не происходит, строка состояния по-прежнему выглядит черной, а не белой

Кто-нибудь сталкивалсяэтот вопрос?

1 Ответ

1 голос
/ 27 сентября 2019

Наконец-то я разобрался!

магический код для установки светлого текста в строке состояния:

 self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark

конечно, если вы хотите перейти на темный текст, я должен установить егона .light.

Некоторые вещи, на которые следует обратить внимание:

  • Этот код:

    if #available(iOS 13.0, *) {
        overrideUserInterfaceStyle = .dark
    }
    

    , хотя он должен установить весь вид и подпредставления темным, кажется, не влияет на строку состояния.

  • Вы также можете использовать:

    UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

    , но, конечно, не рекомендуется, поэтому яРекомендую другие способы

  • Вам все еще нужно:

    self.navigationController?.navigationBar.barStyle = .black, но поставьте ПОСЛЕ в настройках UINavigationBarAppearance () и после self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark.

Итоговый код будет выглядеть так:

if #available(iOS 13.0, *) {
        let navBarAppearance = UINavigationBarAppearance()
        navBarAppearance.configureWithOpaqueBackground()
        navBarAppearance.accessibilityTextualContext = .sourceCode
        navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
        navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
        navBarAppearance.backgroundColor = .brownCircles
        navBarAppearance.shadowImage = nil // remove navigationBar Bottom border
        navBarAppearance.shadowColor = nil // remove navigationBar Bottom border

        self.navigationController?.navigationBar.standardAppearance = navBarAppearance
        self.navigationController?.navigationBar.compactAppearance = navBarAppearance
        self.navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance

        self.navigationController?.navigationBar.overrideUserInterfaceStyle = .dark
} else {
        self.navigationController?.navigationBar.barTintColor = .blue
        self.navigationItem.title = NSLocalizedString(kTitle, comment: kTitle.capitalized)
}
self.navigationController?.navigationBar.barStyle = .black

Надеюсь, это поможет!;)

...