Цвет строки состояния Не изменяется SwiftUI

Спасибо, что нашли время помочь другим :)

Описание проблемы:

Я запускаю новое приложение для iOS 14–16 с SwiftUI. В этом новом приложении мы удалили логику AppDelegate и SceneDelegate, просто пытаясь упростить его, используя только WindowGroup.

Дело в том, что все представления в приложении должны отображать белую строку состояния (для темного контента), и таким образом я пытался настроить строку состояния один раз, в Info.plist... Но ничего не получилось, каждая страница в Интернете просит меня сделать то же самое...

И его нужно показывать рядом с экраном запуска, потому что он также похож на темный контент.

Что я делаю:

В Info.plist я применяю следующие значения:

  • View controller-based status bar appearanceсо стоимостьюNO
  • Status bar styleсо стоимостьюDark Content

И, возможно, немного излишне, но в разделе «Проект» > «Основные» > «Информация о развертывании» > «Стиль строки состояния»: «Темное содержимое».

Простой код фактического представления:

      import SwiftUI

@main
struct ExampleApp: App {
    var body: some Scene {
        WindowGroup {
            NavigationView {
                VStack {
                    Text("This is a simple view. Status bar has to be white.")
                }
            }
            .navigationViewStyle(StackNavigationViewStyle())
        }
    }
}

Вопросы

  1. Почему не наносится цвет?
  2. Есть ли какой-нибудь способ изменить его, который не устарел и совместим без Scene/AppDelegate + WindowGroup?
  3. Влияет ли .preferredColorScheme(.dark) каким-либо образом на собственные элементы, такие как .contextMenu() ? Или просто на оттенок статус-бара?

1 ответ

Попробуйте добавить этот инициализатор в основную структуру:

      init() {
    // Navigation Bar Title font and background colour.
    let navBarAppearance = UINavigationBar.appearance()
    // Background
    navBarAppearance.backgroundColor = UIColor.blue
    // Font colour
    navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.orange]
    navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.orange]    
}

Это должно помочь, если я правильно понял вашу проблему.

Другие вопросы по тегам