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")
}
}
}
Si ves este vídeo, muestro cómo se queda, pero cuando desplazo más allá de la lista, desaparece.
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:Luego, utiliza el modificador
background
y el modificadoronChange
junto con una variable@State
para detectar cuándo la vista de lista desaparece de la pantalla: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 afalse
, lo cual activa el modificadoronChange
para establecer nuevamente el fondo de la barra de pestañas como transparente. Finalmente, se utiliza el modificadorbackground
para establecer el fondo de la barra de pestañas como transparente cuando la variablemostrarFondoBarraPestañas
esfalse
.