我用 SwiftUI 写了一个列表。我还有一个用作搜索栏的 TextField 对象。我的代码如下所示:
import SwiftUI
struct MyListView: View {
@ObservedObject var viewModel: MyViewModel
@State private var query = ""
var body: some View {
NavigationView {
List {
// how to listen for changes here?
// if I add onEditingChange here, Get the value only after the user finish search (by pressing enter on the keyboard)
TextField(String.localizedString(forKey: "search_bar_hint"), text: self.$query) {
self.fetchListing()
}
ForEach(viewModel.myArray, id: \.id) { arrayObject in
NavigationLink(destination: MyDetailView(MyDetailViewModel(arrayObj: arrayObject))) {
MyRow(arrayObj: arrayObject)
}
}
}
.navigationBarTitle(navigationBarTitle())
}
.onAppear(perform: fetchListing)
}
private func fetchListing() {
query.isEmpty ? viewModel.fetchRequest(for: nil) : viewModel.fetchRequest(for: query)
}
private func navigationBarTitle() -> String {
return query.isEmpty ? String.localizedString(forKey: "my_title") : query
}
}
我现在遇到的问题是列表保留在键盘后面:(。如何设置列表填充底部或边缘插入(或其他任何工作,我完全打开)以便列表的滚动在键盘上方结束?列表“大小”也应该根据键盘是打开还是关闭自动调整。
问题看起来像这样:
请帮助我对此提出任何建议,我真的不知道该怎么做:(。我是一个正在尝试学习它的 SwiftUI 初学者:)。