可以在SwiftUI中实现`ScrollView`交互式键盘关闭吗?

Ben*_*ild 7 ios swiftui

https://developer.apple.com/documentation/uikit/uiscrollview/keyboarddismissmode/interactive

在典型的 中UIScrollView可以设置此属性以使键盘与滚动一起交互关闭。

是否可以在 SwiftUI 中实现这一点?如果它不能直接在 上可用ScrollView,我认为可能可以通过UIScrollView直接嵌入。

huy*_*ync 7

我在我的 ContentView 的 onAppear 修饰符中添加代码。它可以是onDrag.interactive取决于您何时要关闭键盘:

struct ContentView: View {
    var body: some View {
        Text("Hello World")
            .onAppear {
                UIScrollView.appearance().keyboardDismissMode = .onDrag
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我发现,如果显示表情符号键盘并且您滑动表情符号,这会导致键盘奇怪地隐藏 - 关于如何解决这个问题有什么想法吗? (4认同)
  • @hyouuu 对我来说,我试图关闭“列表”上的键盘,所以我使用 UITableView.appearance().keyboardDismissMode = .onDrag 来防止表情符号键盘关闭。 (2认同)

jsb*_*eJS 6

是的,

将此代码添加到 init()

init() {
    // on a list:
    // UITableView.appearance().keyboardDismissMode = .interactive
    UIScrollView.appearance().keyboardDismissMode = .interactive
}
Run Code Online (Sandbox Code Playgroud)


Sco*_*ner 5

还想指出jsbeginnerNodeJS答案也适用于任何可滚动视图,例如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
    }
}
Run Code Online (Sandbox Code Playgroud)


yaw*_*eix 0

查看SwiftUI文档,这似乎还不可能。我认为你最好的选择是将 an 包装到此UIScrollView处以进行开发谈话UIViewRepresentable。我在这里找到了 UIScrollView 的教程,您只需将其添加到代码中KeyboardDismissmode