Изменение темного / светлого режима SwiftUI с помощью @AppStorage

Я пытаюсь изменить тему приложения на 3 варианта: по умолчанию, темный, светлый. И после этого представление переходит к основному представлению, но я бы хотел остаться в представлении настроек.

введите описание изображения здесь

struct SettingsView: View {
...
@State var colors = ["Alapértelmezett", "Sötét", "Világos"] //Default, Dark, Light
@AppStorage("colorIndex") var colorIndex: Int = 0
...
var body: some View {
...
Picker(selection: $colorIndex, label: Text("Megjelenés")) { //Color
                            ForEach(0 ..< colors.count) {
                                Text(self.[$0])
                            }
                            
                        }

...

В MyApp.swift:

@main
struct MyApp: App {

        
    @AppStorage("colorIndex") var colorIndex: Int = 0
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {

            if colorIndex == 1 {
                
                ContentView().environment(\.colorScheme, .dark)
            }
            else if colorIndex == 2 {
                ContentView().environment(\.colorScheme, .light)
            }
            else {
                ContentView()
            }
                

        }
        
    }

}

person sandorb    schedule 18.12.2020    source источник
comment
Вам нужно какое-то состояние приложения, чтобы в ContentView вы могли вернуться в представление настроек.   -  person Paulw11    schedule 18.12.2020


Ответы (1)


Зачем вам делать приложение ответственным за темную и светлую тему, я думаю, вы должны позволить системе справиться с этим. Остальное проверьте вашу функцию. Если вы вызываете ContentView, имеет смысл, что он отображается.

И если вы не хотите, чтобы система справлялась с этим. проверьте это сообщение Возможно, как программно переключиться в темный режим быстро это поможет тебе

person Bas9990    schedule 18.12.2020