可以在 SwiftUI 中实现 `ScrollView` 交互式键盘关闭吗?
Possible to achieve `ScrollView` interactive keyboard dismissal in SwiftUI?
https://developer.apple.com/documentation/uikit/uiscrollview/keyboarddismissmode/interactive
在典型的 UIScrollView
上,可以设置此 属性 以交互方式关闭键盘和滚动条。
是否可以在 SwiftUI 中实现?如果它不能直接在 ScrollView
上使用,我认为可以通过直接嵌入 UIScrollView
来实现。
查看 SwiftUI
文档,这似乎还不可能。我认为您最好的选择是将 UIScrollView
包装成 UIViewRepresentable
参见 here for the dev talk. I found a tutorial for a UIScrollView here 您只需要将 KeyboardDismissmode
添加到代码
是的,
将此代码添加到 init()
init() {
// on a list:
// UITableView.appearance().keyboardDismissMode = .interactive
UIScrollView.appearance().keyboardDismissMode = .interactive
}
可以,请参考https://github.com/michaelhenry/KeyboardAvoider
要么将视图包裹在“KeyboardAvoider {}”中
或
使用 ViewModifier“.avoidKeyboard()”
还要指出 jsbeginnerNodeJS's 也适用于 任何 可滚动视图,例如 List
。例如:
struct ContentView: View {
@ObservedObject private var viewModel = GistsViewModel()
var body: some View {
NavigationView {
VStack {
SearchBar(text: $viewModel.searchText)
List {
ForEach(viewModel.gists) { gist in
NavigationLink(destination: SafariView(url: gist.htmlURL)
.navigationBarTitle("")
.navigationBarHidden(true)) {
GistView(gist: gist)
}
}
}
.navigationBarTitle(Text("GitHub Gists"))
.edgesIgnoringSafeArea(.bottom)
}
}
}
init() {
UIScrollView.appearance().keyboardDismissMode = .interactive
}
}
我将代码添加到我的 ContentView 的 onAppear 修饰符中。它可以是 onDrag
或 .interactive
取决于你想关闭键盘的时间:
struct ContentView: View {
var body: some View {
Text("Hello World")
.onAppear {
UITableView.appearance().keyboardDismissMode = .onDrag
}
}
}
对于那些正在使用 SwiftUI 'List' 并且想要关闭键盘的用户,请改用下面的方法。 UIScrollView 在表情符号键盘水平滚动时关闭键盘。
UITableView.appearance().keyboardDismissMode = .onDrag
https://developer.apple.com/documentation/uikit/uiscrollview/keyboarddismissmode/interactive
在典型的 UIScrollView
上,可以设置此 属性 以交互方式关闭键盘和滚动条。
是否可以在 SwiftUI 中实现?如果它不能直接在 ScrollView
上使用,我认为可以通过直接嵌入 UIScrollView
来实现。
查看 SwiftUI
文档,这似乎还不可能。我认为您最好的选择是将 UIScrollView
包装成 UIViewRepresentable
参见 here for the dev talk. I found a tutorial for a UIScrollView here 您只需要将 KeyboardDismissmode
添加到代码
是的,
将此代码添加到 init()
init() {
// on a list:
// UITableView.appearance().keyboardDismissMode = .interactive
UIScrollView.appearance().keyboardDismissMode = .interactive
}
可以,请参考https://github.com/michaelhenry/KeyboardAvoider
要么将视图包裹在“KeyboardAvoider {}”中
或
使用 ViewModifier“.avoidKeyboard()”
还要指出 jsbeginnerNodeJS's List
。例如:
struct ContentView: View {
@ObservedObject private var viewModel = GistsViewModel()
var body: some View {
NavigationView {
VStack {
SearchBar(text: $viewModel.searchText)
List {
ForEach(viewModel.gists) { gist in
NavigationLink(destination: SafariView(url: gist.htmlURL)
.navigationBarTitle("")
.navigationBarHidden(true)) {
GistView(gist: gist)
}
}
}
.navigationBarTitle(Text("GitHub Gists"))
.edgesIgnoringSafeArea(.bottom)
}
}
}
init() {
UIScrollView.appearance().keyboardDismissMode = .interactive
}
}
我将代码添加到我的 ContentView 的 onAppear 修饰符中。它可以是 onDrag
或 .interactive
取决于你想关闭键盘的时间:
struct ContentView: View {
var body: some View {
Text("Hello World")
.onAppear {
UITableView.appearance().keyboardDismissMode = .onDrag
}
}
}
对于那些正在使用 SwiftUI 'List' 并且想要关闭键盘的用户,请改用下面的方法。 UIScrollView 在表情符号键盘水平滚动时关闭键盘。
UITableView.appearance().keyboardDismissMode = .onDrag