Solución:
Una solución de trabajo:
Todos los SwiftUI List
s están respaldados por un UITableView
en iOS. por lo que debe cambiar el color de fondo de el tableView. Pero desde Color
y UIColor
los valores son ligeramente diferentes, puede deshacerse de la UIColor
.
struct ContentView: View {
init(){
UITableView.appearance().backgroundColor = .clear
}
@State var value = ""
var body: some View {
Form {
Section(header: Text("First Name")) {
TextField("First Name", text: $value)
}
Section(header: Text("Last Name")) {
TextField("Last Name", text: $value)
}
}
.foregroundColor(Color.blue)
.background(Color.yellow)
}
}
Ahora puedes usar Cualquier fondo (incluyendo todos Color
s) quieres
Tenga en cuenta que esas áreas blancas superior e inferior son son seguras y puedes usar .edgesIgnoringSafeArea()
modificador para deshacerse de ellos.
Restaurar
Ya que UITableView.appearance().backgroundColor
se aplica a nivel mundial, puede utilizar .onAppear
modificador para cambiarlo en diferentes vistas (ya que es un cambio global). Entonces puedes usar otro onAppear
o onDisappear
para reinicialo de vuelta a lo que quieres.
Y los colores predeterminados son:
UIColor.systemGroupedBackground
Para el estilo agrupado. Y
UIColor.systemBackground
Para el estilo sencillo.
Y ambos tienen soporte automático tanto para el modo oscuro como para el modo claro.
prueba esto
.onAppear {
UITableView.appearance().backgroundColor = .blue
}
La respuesta aceptada por Mojtaba Hosseini, arriba, funciona pero la declaración init () no es un buen lugar para la UITableView
declaración. Esto se debe a que “codifica” los parámetros de inicio de ContentView. En este caso no tiene ninguno, así que todo funciona, pero si un @ObservedObject
se agregó a la vista, entonces esto rompería la función init.
Mucho más simple simplemente agregar la declaración UITable al body
, devuelve explícitamente el Form
y borra el init()
.
var body: some View {
UITableView.appearance().backgroundColor = .clear
return Form {...}
}
Sin embargo, establecer el color de fondo en el Form
normalmente funciona como se esperaba. El hecho de que no esté funcionando ContentView
la pantalla puede ser un error.