Status Bar не меняет цвет swift
Почему-то не меняется цвет элементов у Status Bar при смене темы приложения, но при этом на iOS 18 меняется всё как надо
import SwiftUI
import DeviceKit
import bFoundation
import bData
import bDomain
import bDesignSystem
struct AppSettingsView: View {
// Используем @AppStorage для автоматического сохранения и загрузки выбранного режима
@AppStorage("deviceMode") private var selectedMode: Mode = .system
@DesignSystem(\.colors) var colors
// Перечисление для режимов
enum Mode: String {
case system, light, dark
}
var body: some View {
VStack(alignment: .leading) {
Text("Mode preference")
.font(\.heading.h5)
.foregroundColor(\.content.primary)
Text("Adjust display settings for eye comfort.")
.font(\.body.medium14)
.foregroundColor(\.content.secondary)
HStack {
modeButton(mode: .system, title: "System", icon: Icons.More.systemMod.view)
modeButton(mode: .light, title: "Light", icon: Icons.More.lightMod.view)
modeButton(mode: .dark, title: "Dark", icon: Icons.More.darkMod.view)
}
}
.navigationTitle("App Settings")
.dsItemBackground
.padding(16)
.environment(\.isCompactScreen, [.iPhoneSE, .simulator(.iPhoneSE)].contains(Device.current))
.onAppear {
// Устанавливаем стиль интерфейса при инициализации
applyUserInterfaceStyle(selectedMode)
}
.onChange(of: selectedMode) { newMode in
// Применяем стиль интерфейса при изменении режима
applyUserInterfaceStyle(newMode)
}
Spacer()
}
private func modeButton(mode: Mode, title: String, icon: some View) -> some View {
VStack {
Button(action: {
selectedMode = mode
print("\(title) Mode is enabled")
}, label: {
icon
.padding(8)
})
.overlay(
RoundedRectangle(cornerRadius: 19)
.stroke(selectedMode == mode ? colors.accent.primary.color : .clear, lineWidth: 2)
)
Text(title)
.font(\.body.medium14)
.foregroundColor(\.content.primary)
.frame(maxWidth: .infinity) // Центрирование текста
}
}
private func applyUserInterfaceStyle(_ mode: Mode) {
switch mode {
case .system:
setUserInterfaceStyle(.unspecified)
case .light:
setUserInterfaceStyle(.light)
case .dark:
setUserInterfaceStyle(.dark)
}
}
private func setUserInterfaceStyle(_ style: UIUserInterfaceStyle) {
if let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
scene.windows.first?.overrideUserInterfaceStyle = style
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
AppSettingsView()
}
}