es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualización del windowStyle de WindowGroup en el ciclo de vida de SwiftUI de macOS.

Quiero poder actualizar windowStyle de mi App a través de ContentView, intenté 2 enfoques, ¡pero ambos fallaron! Buscando resolver el problema con el ciclo de vida de macOS SwiftUI.

@main
struct macOSApp: App {

    @State private var windowToolbarStyle: Bool = false

    var body: some Scene {

        WindowGroup {
            ContentView(windowToolbarStyle: $windowToolbarStyle)
        }
        .windowStyle(windowToolbarStyle ? TitleBarWindowStyle() : HiddenTitleBarWindowStyle())

    }
}

@main
struct macOSApp: App {

    @State private var windowToolbarStyle: Bool = false

    var body: some Scene {

        if windowToolbarStyle {
            WindowGroup {
                ContentView(windowToolbarStyle: $windowToolbarStyle)
            }
        }
        else {
            WindowGroup {
                ContentView(windowToolbarStyle: $windowToolbarStyle)
            }
            .windowStyle(HiddenTitleBarWindowStyle())
        }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para actualizar el windowStyle de tu aplicación a través de ContentView en macOS SwiftUI, puedes usar el envoltorio de propiedad @AppStorage para persistir el valor de windowToolbarStyle entre los lanzamientos de la aplicación. Aquí están los pasos:

    1. Agrega el envoltorio de propiedad @AppStorage a la propiedad windowToolbarStyle en la estructura macOSApp:
    @AppStorage("windowToolbarStyle") private var windowToolbarStyle = false
    

    Esto almacenará el valor actual de windowToolbarStyle en UserDefaults de la aplicación.

    1. Modifica el WindowGroup en el cuerpo de tu estructura macOSApp para usar el modificador windowStyle con el valor actualizado de windowToolbarStyle:
    WindowGroup {
        ContentView(windowToolbarStyle: $windowToolbarStyle)
    }
    .windowStyle(windowToolbarStyle ? TitleBarWindowStyle() : HiddenTitleBarWindowStyle())
    
    1. En tu ContentView, crea un botón de alternancia que actualice el valor de windowToolbarStyle cuando se presione:
    struct ContentView: View {
        @Binding var windowToolbarStyle: Bool
    
        var body: some View {
            Toggle("Mostrar Barra de herramientas", isOn: $windowToolbarStyle)
        }
    }
    
    1. Para asegurarte de que el windowStyle se actualice cuando se presione el botón de alternancia, puedes agregar el modificador .onChange a la propiedad windowToolbarStyle en el WindowGroup:
    WindowGroup {
        ContentView(windowToolbarStyle: $windowToolbarStyle)
    }
    .windowStyle(windowToolbarStyle ? TitleBarWindowStyle() : HiddenTitleBarWindowStyle())
    .onChange(of: windowToolbarStyle) { value in
        UserDefaults.standard.set(value, forKey: "windowToolbarStyle")
    }
    

    Esto actualizará el valor de UserDefaults para “windowToolbarStyle” cada vez que se presione el botón de alternancia, y el windowStyle se actualizará en consecuencia.

Comments are closed.