如何在SwiftUI中删除Form的顶部空间?

时间:2019-11-03 14:43:47

标签: swiftui

如何在导航视图中顶部对齐表单。我有以下内容,当我从正文中删除NaviagationView时,该窗体在顶部对齐。将NavigationView放置在适当的位置,我会在它们之间留有间距(添加红色框以显示空间)。我可以在Form上使用.padding(.top,-20),但是在此方法工作时会稍微有些歪斜。

Screenshot

NavigationView {
            Form {
                VStack {
                    HStack {
                        Text("Name:").underline().font(.headline)
                        TextField("Name", text: $routine.name)

                    }
                    roundPicker()
                    TimeSelectionView(stateName: "A", stateDuration: "0:30", stateBackground: "#df405a")
                    TimeSelectionView(stateName: "B", stateDuration: "1:30", stateBackground: "#4ea1d3")
                    TimeSelectionView(stateName: "C", stateDuration: "3:00", stateBackground: "#4f953b")
                }
            }
            .navigationBarTitle("Create", displayMode: .inline)
            .navigationBarItems(trailing:
                Button(action: {
                    //Save Routine
                    self.routine.rounds = self.roundsArray[self.rounds]

                    print("Workout Name: \(self.routine.name)")
                    print("Workout Rounds: \(self.routine.rounds)")
                }, label: {
                    Text("Save")
                })
            )

        }

4 个答案:

答案 0 :(得分:3)

SwiftUI Form实际上是幕后的分组样式UITableView,默认为tableHeaderView。因此,您可以像这样删除它:

struct ContentView: View {

    init() {
        UITableView.appearance().tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: Double.leastNonzeroMagnitude))
    }

    var body: some View {
        ,,,
    }
}

答案 1 :(得分:3)

在Xcode 12中,设置表标题视图不再对我有用,而是设置负的top内容插入似乎可以实现相同的目的。

UITableView.appearance().contentInset.top = -35

答案 2 :(得分:0)

清洁器将导航栏标题添加到表单部分,然后设置为隐藏

Form {
// add end of form section
}.navigationBarHidden(true).navigationBarTitle("Title") // Form

答案 3 :(得分:0)

如果您使用 Introspect,请将其添加到您的 NavigationView

.introspectTableView {
    $0.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: Double.leastNonzeroMagnitude))
}