可以在 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