Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SwiftUI Can't Remove Space Above Picker - Form Version

Tags:

xcode

ios

swiftui

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:

enter image description here

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)
like image 235
JohnSF Avatar asked Jan 01 '23 10:01

JohnSF


2 Answers

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 .....
}
like image 110
Rohit Makwana Avatar answered Jan 05 '23 14:01

Rohit Makwana


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

like image 27
Phillip Brisco Avatar answered Jan 05 '23 14:01

Phillip Brisco