首页 > 解决方案 > 在 SwiftUI 中,如何去除 Form 对象后多余的空白?

问题描述

我正在尝试创建一个简单的页面,该页面具有从几个不同选项中进行选择的选项,然后在选择选项后显示一个文本字段和按钮。逻辑很好用,但不幸的是,在 Form 对象和其余 UI 元素之间有大量空白 - 有没有办法改变这种情况?

这是代码:

        VStack {
        Text("What would you like help with?")
            .font(.largeTitle)
            .fontWeight(.bold)
            .multilineTextAlignment(.center)
                    
        Form {
            Picker("Color", selection: $selectedIndex) {
                ForEach(0 ..< arrayOfNames.count) {
                    Text(self.arrayOfNames[$0])
                }
            }
        }
        
        TextField("Enter your question", text: $question)
            .opacity(selectedIndex > 0 ? 1 : 0)
            .textFieldStyle(RoundedBorderTextFieldStyle())
        
        Button(action: {}) {
            Text("Ask")
        }.opacity(selectedIndex > 0 ? 1 : 0)
    

这是显示问题的图像:

标签: iosswiftxcodeswiftui

解决方案


这个答案与我在这里的答案非常相似。

我的答案使用SwiftUI-Introspect,因此您可以获得内容高度而不必猜测正确的高度。您可以确定这将适应各种因素,如屏幕方向、字体大小等。

Form高度非常贪婪 - 你需要以某种方式限制它。我正在做的是获取Form内容的真实高度,然后使用它来限制Form高度。

解决方案

  1. 创建一个@State变量以包含内容高度:
@State private var contentHeight: CGFloat?
  1. 添加代码以限制Form高度:
Form {
    /* ... */
}
.introspectTableView { tableView in
    contentHeight = tableView.contentSize.height
}
.frame(height: contentHeight)

就是这样!

结果:

结果


推荐阅读