Saltar al contenido

¿Cómo se oculta o deshabilita condicionalmente un botón?

Posteriormente a investigar con expertos en la materia, programadores de diversas ramas y profesores dimos con la respuesta al problema y la plasmamos en este post.

Solución:

Espero hidden el modificador obtiene el argumento más tarde, pero desde entonces, establezca el alfa en su lugar:

@State var shouldHide = false

var body: some View 
    Button("Button")  self.shouldHide = true 
    .opacity(shouldHide ? 0 : 1)

Para mí funcionó perfectamente para configurar el framela altura a cero cuando no quieras verla. Cuando desee tener el tamaño calculado, simplemente configúrelo en nil:

SomeView
    .frame(height: isVisible ? nil : 0)

Si desea deshabilitarlo además de ocultarlo, puede configurar .disabled con el booleano alternado.

SomeView
    .frame(height: isVisible ? nil : 0)
    .disabled(!isVisible)

Puede utilizar los nuevos enlaces bidireccionales de SwiftUI y agregar una declaración if como:

struct ContentView: View 

    @State var shouldHide = false

    var body: some View 
        ZStack 
            Color("SkyBlue")
            VStack 
                if !self.$shouldHide.wrappedValue  
                    Button("Detect") 
                        self.imageDetectionVM.detect(self.selectedImage)
                    
                    .padding()
                    .background(Color.orange)
                    .foregroundColor(Color.white)
                    .cornerRadius(10)
                
            
        
    

El beneficio de hacer esto en lugar de establecer la opacidad en 0 es que eliminará el espacio/relleno extraño de su interfaz de usuario causado por el botón que aún está en la vista, simplemente no visible (si el botón está entre otros componentes de la vista, es decir) .

Si posees alguna suspicacia o forma de progresar nuestro enunciado puedes escribir una nota y con placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *