SwiftUI 表单无法使用 Spacer() 正确定位

Arí*_*deh 3 forms xcode ios swift swiftui

我正在尝试创建一个个人资料页面,其中底部有一个带有各种选项的表单。Spacer(但是,当我在 中插入) 时VStack,表单不会像它应该做的那样移动到屏幕底部。我尝试用文本替换表单,效果很好,移动到屏幕底部。所以我假设这与形式有关。

当前布局

这是我的代码

struct Profile: View {

    @Environment(\.presentationMode) var mode: Binding<PresentationMode>

    var body: some View {

        NavigationView {
            VStack {
                Image(systemName: "person.crop.circle")
                    .resizable()
                    .frame(width: 50, height: 50)
//                    .padding(.top)

                Text("email@email.com")
                    .font(.title)

                Spacer()

                Form {
                    Section {
                        //menuListItem(image: "gear", label: "Settings")
                        menuListItem(image: "questionmark.circle", label: "Help")                     menuListItem(image: "info.circle", label: "About")
                    }

                    Section {
                        HStack {
                            Spacer()
                            Button(action: {
                                UserDefaults.standard.set(false, forKey: "LoggedIn")
                                UserDefaults.standard.set(nil, forKey: "user_id")
                                UserDefaults.standard.set(nil, forKey: "school_id")
                                self.mode.wrappedValue.dismiss()
                            }) {
                                Text("Log Out")
                                    .font(.body)
                                    .foregroundColor(.red)
                            }
                            Spacer()
                        }
                    }
                }  
            }
            .navigationBarTitle("Profile", displayMode: .inline)
        }
    }
}

struct menuListItem: View {

    var image: String
    var label: String

    var body: some View {
        HStack {
            Image(systemName: image)
            Text(label)
                .font(.body)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

FRI*_*DAY 5

只要表单的底部未知(因为表单是可滚动的并且其项目从顶部开始),swiftUI 就不知道这两个视图之间应放置多少空间。所以Spacer()没有帮助。

尝试这个:

给出您的形式:例如,.frame(height: 500).padding(.top, 400) 修饰符。

  • 我不明白这个答案。“Form”的底部与“VStack”或“List”的底部有何不同?它是未知的,直到到达尾随的“}”,然后它才知道。为什么“List”或“VStack”会移到顶部,而不是“Form”?使用 `.frame` 或 `.padding` 是一种 hack,而不是解决方案。 (3认同)