В iOS13 цвет фона строки состояния отличается от панели навигации в режиме большого текста - PullRequest
3 голосов
/ 12 июня 2019

Problems demo

Предварительные условия для воспроизведения проблемы:

  1. Xcode 11 beta + iOS 13 (последняя версия до 12 июня 2019 г.)
  2. Панель навигации находится в режиме большого текста
  3. Укажите цвет панели навигации.

Строка состояния будет оставаться белым в реальном устройстве над зеленой панелью навигации.

Решения, которые я пробовал:

  1. Вернуть его обратно в iOS12 поможет, но в конечном итоге мы столкнемся с iOS13 ...
  2. отключение режима большого текста решит эту проблему ...
  3. скрыть строку состояния, чтобы исправить это, но это приведет к перекрытию текста статуса с элементом панели навигации.

Есть идеи? признателен за любую помощь.

Ответы [ 5 ]

3 голосов
/ 08 июля 2019

Если проблема в том, что вы хотите придать цвету панели навигации цвет, когда отображается большой заголовок, используйте новый класс UINavigationBarAppearance.

    let app = UINavigationBarAppearance()
    app.backgroundColor = .blue
    self.navigationController?.navigationBar.scrollEdgeAppearance = app
3 голосов
/ 07 июля 2019

В iOS 13 навигационные панели с большим заголовком имеют прозрачный цвет в соответствии с рекомендациями по интерфейсу пользователя Apple.См. Больше информации здесь :

В iOS 13 и более поздних версиях панель навигации с большим заголовком по умолчанию не включает фоновый материал или тень.Кроме того, большой заголовок переходит к стандартному заголовку, когда люди начинают прокручивать содержимое

2 голосов
/ 22 июля 2019

Никаких хаков или фанков здесь не требуется. Ключ определяет желаемый вид и устанавливает это значение в ОБА навигационной панели standardAppearance И ее scrollEdgeAppearance. У меня есть следующее в инициализации для моего базового подкласса контроллера навигации для всего моего приложения:

if #available(iOS 13.0, *) {
    let navBarAppearance = UINavigationBarAppearance()
    navBarAppearance.configureWithOpaqueBackground()
    navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
    navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
    navBarAppearance.backgroundColor = UIColor.Theme.primary
    navigationBar.standardAppearance = navBarAppearance
    navigationBar.scrollEdgeAppearance = navBarAppearance
}

enter image description here

0 голосов
/ 26 июля 2019

Благодаря ответу Майка и Ганса.Мой случай - полупрозрачная строка состояния и панель навигации с альфа 0,5.iOS13 кажется сложным.Ниже приведен мой результат теста, будет работать, если вы хотите прозрачный для обоих.

if #available(iOS 13.0, *) {
                let navBarAppearance = UINavigationBarAppearance()
                // This only set top status bar as transparent, not the nav bar.
                navBarAppearance .configureWithTransparentBackground()
                // This set the color for both status bar and nav bar(alpha 1).
                navBarAppearance.backgroundColor = UIColor.red.withAlphaComponent(0.5)
                navigationController?.navigationBar.standardAppearance = navBarAppearance
                navigationController?.navigationBar.scrollEdgeAppearance = navBarAppearance
                // Nav bar need sets to translucent for both nav bar and status bar to be translucent.
                navigationController?.navigationBar.isTranslucent = true
                // // Need to reset nav bar's color to make it clear to display navBarAppearance's color
                navigationController?.navigationBar.backgroundColor = UIColor.clear
               } 
0 голосов
/ 22 июля 2019

Я обнаружил, что с раскадровками вы должны подделывать навигационную панель (действительно работает только с непрозрачными навигационными панелями, предполагая, что ваш зеленый непрозрачен).Лучший способ, который я нашел, - создать вид заполнителя (фиолетовый), который подходит для вставок в безопасной области, а затем добавить поддельный вид за панелью навигации (голубой / синий), то есть оставшуюся высоту.Работает на мой проект, но да, это немного взломать.Screenshot from Xcode 11 beta 4 displaying constraints required for status bar hack

Редактировать: Это в основном для LaunchScreen.storyboard, где вы не можете использовать пользовательский класс контроллера представления.

...