【发布时间】:2020-08-28 12:12:46
【问题描述】:
我知道有关闭键盘的答案,但大多数情况下它们是在键盘外点击时触发的。 正如我在问题中所说,如何实现在滑动时关闭键盘(到底部)。
【问题讨论】:
标签: swiftui
我知道有关闭键盘的答案,但大多数情况下它们是在键盘外点击时触发的。 正如我在问题中所说,如何实现在滑动时关闭键盘(到底部)。
【问题讨论】:
标签: swiftui
UIScrollView 有keyboardDismissMode,当设置为interactive 时,将实现你想要的。 SwiftUI 不对此提供直接支持,但由于 SwiftUI 在后台使用 UIScrollView,因此您可以使用它来将 keyboardDismissMode 设置为对应用中的所有滚动视图进行交互。
UIScrollView.appearance().keyboardDismissMode = .interactive
您的视图层次结构中必须有一个 ScrollView 才能工作。这是一个演示该行为的简单视图:
struct ContentView: View {
@State private var text = "Hello, world!"
var body: some View {
ScrollView {
TextField("Hello", text: $text)
.padding()
}
.onAppear {
UIScrollView.appearance().keyboardDismissMode = .interactive
}
}
}
唯一需要注意的是,这会影响您应用中的所有滚动视图。如果您只想影响应用中的一个滚动视图,我不知道有什么简单的解决方案。
【讨论】:
例如,如果您有一个消息列表,那么您可以:
List {
ForEach(...) { ...
}
}.resignKeyboardOnDragGesture()
extension View {
func resignKeyboardOnDragGesture() -> some View {
return modifier(ResignKeyboardOnDragGesture())
}
}
struct ResignKeyboardOnDragGesture: ViewModifier {
var gesture = DragGesture().onChanged { _ in
UIApplication.shared.endEditing(true)
}
func body(content: Content) -> some View {
content.gesture(gesture)
}
}
顺便说一句,它来自这里:https://stackoverflow.com/a/58564739/7974174
【讨论】: