微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在SwiftUI中的WhatsApp中关闭键盘上的滑动

如何解决如何在SwiftUI中的WhatsApp中关闭键盘上的滑动

我知道有一些解雇键盘的答案,但是大多数情况下,它们是在敲击键盘外部时触发的。 正如我在问题中所说的,如何实现在滑动(到底部)时关闭键盘

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。