swiftui表单没有出现在列表中

Posted

技术标签:

【中文标题】swiftui表单没有出现在列表中【英文标题】:swiftui forms not appearing inside list 【发布时间】:2020-03-18 18:57:07 【问题描述】:

我正在开发一个需要用户填写表格的应用程序。表单实际上不是问题,但问题是当我动态地想要不止一个表单时。形式的数量(相同的外观)取决于一定的数量。所以我决定创建一个模型并将表单放入列表中。这样,表格的数量将等于第 n 个数字。问题是他们没有出现。如果我删除他们出现的表格,如果我输入他们没有的表格。是不是列表中不允许有表格?

以下是预期结果

但是当我在列表中添加表单时,我得到

这是我的简单列表:

struct UserTab: View 
let seats = ["A4", "B2", "C1", "D3"]
var body: some View 
    List(seats, id: \.self)seat in
        PassengerInfoModel()
    

PassengerInfoModel 如下:

    struct PassengerInfoModel: View 
    @State private var fullName: String = ""
    var body: some View 
        Form
            Text("Paasenger 1")
            TextField("Full name", text: $fullName)
        
    

提前致谢。

【问题讨论】:

使用 Form 将无法达到预期的效果,因为它现在具有不同的外观和感觉(请参阅 Form 示例 ios 内置设置)。您需要为您的 PassengerInfo 自定义视图(并且可能在 ScrollView 而不是 List 中,但它可能取决于)。而且,顺便说一句,Form 本身就是一种 List,所以 List 中的 Form 会表现得很奇怪。而且,顺便说一句,它们就在那里,只需在行内滚动即可。 我想我明白你的意思。因此,为了实现所需的行为,我无法通过形式获得它。我必须手动创建(假装)表单并使用它。我说的对吗? 【参考方案1】:

因为没有确定表单框架,所以会得到这个结果。 尝试在表单中添加一些框架,应该没问题

struct PassengerInfoModel: View 
    @State private var fullName: String = ""
    var body: some View 
        Form
            Text("Paasenger 1")
            TextField("Full name", text: $fullName)
        .frame(height: 200)
    

一般情况下,您应该避免在 Scrollview 中使用 Form,因为它们都有滚动功能并且无法按您的意愿工作

【讨论】:

感谢您的回答和快速响应,添加框架后出现奇怪的行为。我可以滚动一个表单,而其他表单仍然(不移动)并且不滚动 这是因为你使用的是scrollview里面的表单,并且两者都有滚动行为,滚动冲突。为避免这种情况,您应该在代码中只使用这些元素之一 所以...如果我不能在 List 中使用表单,因为它们都有滚动行为,并且我不能单独使用表单和某种循环(滚动),我该如何实现? 为什么需要使用表单?您可以使用滚动视图实现 UI,并在滚动视图中设置自定义视图

以上是关于swiftui表单没有出现在列表中的主要内容,如果未能解决你的问题,请参考以下文章

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

swiftui列表没有出现但数组不为空

如何在 SwiftUI 列表中设置 NavigationLink

如何为 SwiftUI 列表中的各个行设置动画?

减少部分 SwiftUI 之间的表单间距

没有标签的 SwiftUI Picker 视图