如何在SwiftUI中消除像WhatsApp中那样的滑动键盘

如何在SwiftUI中消除像WhatsApp中那样的滑动键盘,swiftui,Swiftui,我知道有人会拒绝使用键盘,但大多数情况下,它们都是在键盘外点击时触发的。 如我在问题中所述,如何实现轻扫键盘(到底部)。例如,如果您有一个消息列表,那么您可以: List { ForEach(...) { ... } }.resignKeyboardOnDragGesture() 顺便说一下,它是从这里来的:UIScrollView具有keyboardDismissMode,当设置为interactive时,将实现您想要的功能。SwiftUI不提供对此的直接支持,但由于在引擎

我知道有人会拒绝使用键盘,但大多数情况下,它们都是在键盘外点击时触发的。
如我在问题中所述,如何实现轻扫键盘(到底部)。

例如,如果您有一个消息列表,那么您可以:

List {
    ForEach(...) { ...

    }
}.resignKeyboardOnDragGesture()

顺便说一下,它是从这里来的:

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
        }
    }
}

唯一需要注意的是,这会影响应用程序中的所有滚动视图。如果你只想影响应用程序中的一个滚动视图,我不知道一个简单的解决方案。

这个答案似乎可以解决问题。谢谢,我不能投票,因为我的声誉还不够,但你可以投票支持我的问题:)
struct ContentView: View {
    @State private var text = "Hello, world!"

    var body: some View {
        ScrollView {
            TextField("Hello", text: $text)
                .padding()
        }
        .onAppear {
            UIScrollView.appearance().keyboardDismissMode = .interactive
        }
    }
}