Search code examples
iosswiftuiios14

Clear background for form sections in SwiftUI?


I'm trying to remove the white background of some sections so the elements lay right on the grey background, but I can't get the section background to be removed or transparent.

This is what I'm trying:

struct ContentView: View {
    
    var body: some View {
        Form {
            Section {
                Text("Hello!")
                Button {
                    print("Clicked")
                } label: {
                    Text("Click Me!!")
                }
            }
            Section {
                VStack {
                    Button("Button 1") {}
                    Spacer()
                    Button("Button 2") {}
                }
            }
            .background(Color.clear) // Not doing anything
            Section {
                VStack(alignment: .leading) {
                    Text("Location")
                        .font(.headline)
                    Group {
                        Text("Abc")
                        Text("Abc")
                        Text("Abc")
                    }
                    .font(.caption)
                }
            }
        }
    }
}

This is what it looks like:

enter image description here

I tried to add .background(Color.clear) to the Section and VStack, but it did not have any effect. How an this be achieved in SwiftUI?


Solution

  • Even in SwiftUI 2 Form is built on top of UIKit, specifically UITableView.

    You need to remove the default UITableViewCell's background (only once, preferably in the App init):

    UITableViewCell.appearance().backgroundColor = UIColor.clear
    

    and change the background using:

    Section {
        VStack {
            Button("Button 1") {}
            Spacer()
            Button("Button 2") {}
        }
    }
    .listRowBackground(Color.clear)