问题描述
我知道有一些解雇键盘的答案,但是大多数情况下,它们是在敲击键盘外部时触发的。 正如我在问题中所说的,如何实现在滑动(到底部)时关闭键盘。
解决方法
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