私は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の初心者です:)。