ListView中的SwiftUI文本字段在筛选列表项后变为空白

ListView中的SwiftUI文本字段在筛选列表项后变为空白,listview,textfield,swiftui,Listview,Textfield,Swiftui,我正在开发一个iOS应用程序,它显示一个可以编辑的项目列表。为此,我使用了List和TextField来处理这些项目 我的应用程序有一些按钮,允许用户筛选此列表中当前显示的信息。我遇到了一个问题,导致TextField值在过滤后变为空白,我一辈子都搞不清楚自己做错了什么 这是一个非常基本的复制品: import SwiftUI let allItems = ["1. Foo", "1. Bar", "1. Baz", "2. Goo", "2. Gar", "2. Gaz"] struct

我正在开发一个iOS应用程序,它显示一个可以编辑的项目列表。为此,我使用了
List
TextField
来处理这些项目

我的应用程序有一些按钮,允许用户筛选此列表中当前显示的信息。我遇到了一个问题,导致
TextField
值在过滤后变为空白,我一辈子都搞不清楚自己做错了什么

这是一个非常基本的复制品:

import SwiftUI

let allItems = ["1. Foo", "1. Bar", "1. Baz", "2. Goo", "2. Gar", "2. Gaz"]

struct ContentView: View {
    @State private var items = [String]()
    @State private var filterPrefix = "1"

    var body: some View {
        NavigationView {
            List {
                ForEach(items, id: \.self) { item in
                    RowView(item: item)
                }
            }
            .navigationBarItems(trailing: Button("Toggle") {
                self.filterPrefix = (self.filterPrefix == "1" ? "2" : "1")
                self.items = allItems.filter { $0.starts(with: self.filterPrefix) }
            })
            .navigationBarTitle("Items", displayMode: .inline)
        }
        .onAppear {
            self.items = allItems.filter { $0.starts(with: self.filterPrefix) }
        }
    }
}

struct RowView: View {
    var item: String

    @State private var inputText = ""

    var body: some View {
        VStack {
            TextField("", text: $inputText)
        }
        .onAppear {
            print("Item: \(self.item)") // This prints the item successfully
            self.inputText = self.item
        }
    }
}
点击
Toggle
几次后,
TextField
最终变为空。但是,
onAppear
中的代码仍然可以很好地打印文本值

这是一张gif:


我做错什么了吗?我是否应该仅在单击时输入
文本字段
?(这似乎不是一个好主意,但我不知道为什么这不起作用)

我在Xcode 11.2 beta 2(11B44)上运行,但同样的问题在11.1以及iOS 13.1和13.2上都会出现


编辑:为了使事情更加复杂,我将行更改为同时包含文本和文本字段:

        HStack {
            Text(item)
            TextField("", text: $inputText)
        }

现在
TextField
值不会变为空,除非它是列表中的最后一项。我开始觉得自己像个bug了

这个问题现在已经在最新的Xcode beta版(11.4)中修复了

肯定有个bug,我将
行视图
包装在
导航链接
中,似乎阻止了它们的消失,@Andrew有趣!这里同样的结果,看起来确实像个bug。。这是不幸的,因为在我的应用程序中更新Xcode 11.2列表已经变得非常麻烦。对齐问题、文本字段消失、无法删除行(索引超出范围错误)您能解决此问题吗?请尝试文本字段的.id()修饰符,它在某些情况下对我有所帮助。