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.

Solución para Tabview en SwiftUI

En mi aplicación, tengo una vista de pestañas. 4 de las pestañas son páginas en blanco. Sin listas ni nada. Una de ellas tiene una lista y hace que la barra de pestañas sea translúcida debido a la función de desplazamiento. El problema es que cada vez que navego fuera de la página de la lista, la barra de pestañas translúcida permanece. No quiero eso. Quiero que vuelva a ser transparente. Si miras en la aplicación de Fotos, hace esto. Cambia fácilmente de transparente a translúcido y luego vuelve.

var body: some View {
    TabView(selection: $selectedTab) {
        Schedule()
            .tag(Tab.schedule)
            .tabItem {
                Label("Calendario", systemImage: "calendar")
            }

        Messaging()
            .tag(Tab.messaging)
            .tabItem {
                Label("Mensajes", systemImage: "bubble.left")
            }

        Dashboard()
            .tag(Tab.home)
            .tabItem {
                Label("Tablero", systemImage: "note")
            }

        Resources()
            .tag(Tab.resources)
            .tabItem {
                Label("Recursos", systemImage: "folder")
            }

        MailViewTest()
            .tag(Tab.settings)
            .tabItem {
                Label("Configuración", systemImage: "gear")
            }
    }
}

Enlace al vídeo

Si ves este vídeo, muestro cómo se queda, pero cuando desplazo más allá de la lista, desaparece.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar este problema, puedes modificar el modificador onDisappear para establecer el color de fondo de la barra de pestañas como transparente. Aquí tienes un ejemplo de implementación:

    Primero, crea una constante de tipo Color para el fondo transparente:

    let transparentBackground = Color(UIColor.systemBackground).opacity(0)
    

    Luego, utiliza el modificador background y el modificador onChange junto con una variable @State para detectar cuándo la vista de lista desaparece de la pantalla:

    struct Programa: View {
    
        @State private var mostrarFondoBarraPestañas = false
    
        var body: some View {
            NavigationView {
                List {
                    // contenido de tu lista
                }
                .background(
                    Color.white // o el color de fondo que prefieras
                        .onAppear {
                            mostrarFondoBarraPestañas = true
                        }
                        .onDisappear {
                            mostrarFondoBarraPestañas = false
                        }
                        .onChange(of: mostrarFondoBarraPestañas) { newValue in
                            UITabBar.appearance().backgroundImage = newValue ? nil : UIImage()
                        }
                )
            }
            .navigationViewStyle(StackNavigationViewStyle())
            .background(mostrarFondoBarraPestañas ? transparentBackground : nil)
        }
    
    }
    

    Esto establecerá el fondo de la vista de lista con un color sólido, de manera que la barra de pestañas permanezca translúcida al desplazarse. Cuando la vista de lista desaparece, la variable mostrarFondoBarraPestañas cambia a false, lo cual activa el modificador onChange para establecer nuevamente el fondo de la barra de pestañas como transparente. Finalmente, se utiliza el modificador background para establecer el fondo de la barra de pestañas como transparente cuando la variable mostrarFondoBarraPestañas es false.

Comments are closed.