为啥 SwiftUI“表单”会导致我的按钮转到屏幕底部?

Posted

技术标签:

【中文标题】为啥 SwiftUI“表单”会导致我的按钮转到屏幕底部?【英文标题】:Why does the SwiftUI "Form" cause my button to go to the bottom of the screen?为什么 SwiftUI“表单”会导致我的按钮转到屏幕底部? 【发布时间】:2021-05-11 02:19:55 【问题描述】:

我想创建一个视图,它有一个下面有一个按钮的表单。如果我包含一个表单和一个按钮,则该按钮会转到屏幕底部。

没有表单元素

带有表单元素

这只是一个 SwiftUI 错误吗?还是我做错了什么?

//
//  TestFile.swift
//  searchparty
//
//  Created by Me
//

import SwiftUI

struct TestFile: View 
    var body: some View 
        VStack 
            Form
                Text("Hello, World!")
            
            
            Button("Button") 
                print("Button tapped!")
            
        
    


struct TestFile_Previews: PreviewProvider 
    static var previews: some View 
        TestFile()
    

【问题讨论】:

预期行为。 Form 是一个 ScrollView 并占用所有可用的垂直空间。 感谢您的回复。如果这是预期的行为,那么我应该如何实现我正在寻找的结果?如果我将按钮放在表单内,按钮看起来很奇怪,因为它被白色圆角正方形包围。 不幸的是,我认为这是目前 SwiftUI 的一个限制。也许其他人会有解决方法。 我现在不在电脑前,但您可以尝试将按钮设置为空白部分的页脚 成功了!谢谢jdpdx!看起来还是有点 hacky,但它会做! 【参考方案1】:

一个空的Section 和一个footer 可以完成这项工作,尽管您需要明确设置字体,否则footer 将根据表单页脚环境更改它:

struct ContentView: View 
    var body: some View 
        Form 
            Text("Entry")
            
            Section(footer:
                        HStack 
                            Spacer()
                            Button(action: ) 
                                Text("My button")
                                    .font(.system(.body))
                            
                            Spacer()
                        
            ) 
                EmptyView()
            
        
    

【讨论】:

以上是关于为啥 SwiftUI“表单”会导致我的按钮转到屏幕底部?的主要内容,如果未能解决你的问题,请参考以下文章

为啥@FocusState 会导致 SwiftUI 预览崩溃

SwiftUI:列表项跳转到选取器表单中的标题

为啥我的视图在 swiftUI 中首次出现在屏幕上时没有转换

如何将我的登录屏幕链接到我的主屏幕 SwiftUI

共享 SwiftUI 视图的屏幕截图导致崩溃

从目标视图返回时,SwiftUI NavigationLink 显示为突出显示