我有一个 SwiftUI
List
,它应该有一个搜索栏并启用拉动刷新。
理论上来说,这非常简单。但是,每当我更新
@Published
代码中的任何 .refreshable { }
属性时,都会出现搜索栏错误。
我的观点是这样的:
struct MyView: View {
@State var text = ""
var body: some View {
NavigationView {
List {
Text("hello")
}
.refreshable {
model.prop = "world"
}
}
.searchable(text: $text)
}
}
我的模型看起来像这样:
class Model: ObservableObject {
@Published var prop = ""
}
我尝试将更新放入异步块中,但没有解决问题:
DispatchQueue.main.async {
model.prop = "world"
}
ObservableObject
块内的任何非.refreshable { }
变异代码都可以正常工作。
我做错了什么吗?
这种方法解决了动画错误,但也强制您的导航栏始终显示搜索栏
.searchable(text: $viewModel.searchText, placement: .navigationBarDrawer(displayMode: .always))