SwiftUI Can't Remove Space Above Picker - Form Version
I'm struggling mightily with the formatting of pickers in SwiftUI. I built a simple picker with a few other views in a single view app. There is a space between the Header and the picker that I can't remove. I'd settle for setting the gray color to white. If I change the frame of the picker it just scrunches the picker - the gray space remains untouched. I'm not sure what to even call that space - it does not appear to be part of the Header, nor the Picker, nor the Form nor the Section.
The only reference to this issue that I found was article 57851878 which suggests putting the view in the header itself. That does not work and would be a really bad idea anyway.
The space in the image outlined is red is the subject:
And this is the code:
struct ContentView: View {
@State private var thing: String = ""
@State private var enableSaveButton = false
@State private var selection = 0
@State private var selection2 = 0
var things = ["books","desks","chairs","lamps","couches","shelves"]
var body: some View {
NavigationView {
//ScrollView{
VStack {
Group {//first group
VStack {
Text("Text at the Top")
TextField("enter something here", text: $thing)
.frame(width:350, height: 50)
.clipShape(RoundedRectangle(cornerRadius: 12))
.overlay(RoundedRectangle(cornerRadius: 12)
.stroke(Color.gray, lineWidth: 2))
.padding(.leading, 5)
.padding(.bottom, 20)
Section(header: HStack {
Text("This is the Header")
.font(.headline)
.foregroundColor(.blue)
.padding(.bottom, 0)
.padding(.leading, 30)
Spacer()
}
.background(Color.white)
.listRowInsets(EdgeInsets(
top: 0,
leading: 0,
bottom: 0,
trailing: 0))
) {
Form {
Text("This is the Chosen Thing: \(self.things[selection2])")
Picker(selection: self.$selection2, label: Text("Choose Thing").foregroundColor(.blue)) {
ForEach(0 ..< things.count) {
Text(self.things[$0])
}
}//picker
}//form
.frame(width:350, height: 115)
.padding(.top, 0)
}//first picker section
}//vstack
}//first group
Spacer()
Group {//second Group
Text("Enable and Disable this button")
Button(action: {
print("whatever")
} ) {
ZStack {
RoundedRectangle(cornerRadius: 20)
.fill(Color.yellow)
.frame(width: 100, height: 40)
Text("Save").font(.headline)
}
}
.shadow(radius: 12, x: 10, y: 10)
//.disabled(!enableSaveButton)
}//second Group
}//outer VStack
//}//Scrollview
.navigationBarTitle("Things")
}//nav view
}//body
}
Any guidance would be appreciated. Xcode 11.2.1 (11B500)
You can remove upper
and lower
space of Form
by adding below code
struct ContentView: View {
init() {
UITableView.appearance().tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: Double.leastNonzeroMagnitude))
UITableView.appearance().tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: Double.leastNonzeroMagnitude))
}
//your code .....
}
Another possibility is to set the background color for the table view and table view cell to clear in init()
Init() {
UiTableView.appearance().backgroundColor = .clear
UITableViewCell.appearance().backgroundcolor = .clear
}
This will not get rid of the space, but it will make the underlying table transparent to the window background color
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With