SwiftUI无法删除选择器上方的空间-表单版本

时间:2019-12-11 02:50:07

标签: ios xcode swiftui

SwiftUI无法删除选择器上方的空间-表单版本

我正在为SwiftUI中的选择器格式苦苦挣扎。我建立了一个简单的 一个视图应用程序中具有其他一些视图的选择器。页眉之间有一个空格 和我无法删除的选择器。我愿意将灰色设置为白色。如果 我改变了收紧拣选机的拣选机的框架-保留了灰色空间 无动于衷。我不确定该怎么称呼这个空间-它似乎并没有 标题,领料器,表格或部分的内容。

我发现的唯一对此问题的参考是第57851878条,建议将 标题本身中的视图。那是行不通的,反正是个坏主意。

主题中红色区域为红色:

enter image description here

这是代码:

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)

3 个答案:

答案 0 :(得分:3)

您可以通过添加以下代码来删除 upper lowerForm空间

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 .....
}

答案 1 :(得分:0)

它看起来像是表格的节头...

如果您这样更改代码,将会看到一个节标题文本。为什么SwiftUI会自己执行此操作...我不知道....不幸的是,即使将框架设置为高度0,它也不会消失。...

Form {
    Section(header: Text("General Settings")){
    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)

答案 2 :(得分:0)

另一种可能性是设置表格视图和表格视图单元格的背景色,以便在init()中清除

Init() {
    UiTableView.appearance().backgroundColor = .clear
    UITableViewCell.appearance().backgroundcolor = .clear
}

这不会消除空间,但是会使基础表对窗口背景色透明