Possible to achieve `ScrollView` interactive keyboard dismissal in SwiftUI?

swiftui keyboard
swiftui dismiss keyboard
swiftui keyboard done button
swiftui keyboard avoider
swiftui form scroll


On a typical UIScrollView, one may set this property to have the keyboard dismiss interactively alongside a scroll.

Is it possible to achieve this in SwiftUI? If it’s not directly available on ScrollView, I assume it’s perhaps possible by embedding a UIScrollView directly. 🤔

Looking at the SwiftUI documentation it doesn't seem like this is possible yet. I think your best option would be to wrap an UIScrollView into an UIViewRepresentable see here for the dev talk. I found a tutorial for a UIScrollView here you will just need to add the KeyboardDismissmode to the code

UIScrollView.KeyboardDismissMode, The manner in which the keyboard is dismissed when a drag begins in the scroll view. The keyboard does not get dismissed with a drag. case interactive. How to dismiss iOS keyboard programatically (Swift 5) - "Handling Keyboard in iOS" - this has been a topic or rather a problem since the inception of iOS Development. Whether you are a beginner developer or an experienced one, you'll always be dealing with the handling of keyboards in your apps and chat applications sure won't exist without text-fields! But there's not just 1 issue with the


add this code to init()

init() {
    // on a list:
    // UITableView.appearance().keyboardDismissMode = .interactive
    UIScrollView.appearance().keyboardDismissMode = .interactive

iOS custom keyboard dismissal with Swift | by Pete Smith, Custom keyboard dismissal with the table cell pushing the keyboard as it is scrolled down One of these modes is interactive. To get the last UITableViewCell in the correct position, right above the Here, based on the UIScrollView/UITableView contentOffset, we SwiftUI & UIView — A Simple Mistake. Updated for Xcode 12.0. SwiftUI’s ScrollView allows us to create scrolling containers of views relatively easily, because it automatically sizes itself to fit the content we place inside it and also automatically adds extra insets to avoid the safe area.

Also want to point out that jsbeginnerNodeJS's answer also works on any scrollable view, such as List. For example:

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)
                            .navigationBarHidden(true)) {
                                GistView(gist: gist)
                .navigationBarTitle(Text("GitHub Gists"))

    init() {
        UIScrollView.appearance().keyboardDismissMode = .interactive

How to adjust a UIScrollView to fit the keyboard, Interview Questions Interactive Review Test your Swift If your user interface brings up the keyboard, you should respond by adjusting your If you're using a UIScrollView or any classes that have a scroll view as part of their Sponsor Hacking with Swift and reach the world's largest Swift community! If your user interface brings up the keyboard, you should respond by adjusting your layout so that all parts are still visible. If you're using a UIScrollView or any classes that have a scroll view as part of their layout (table views and text views, for example), this means adjusting the contentInset property to account for the keyboard.

Yes you can, please refer to https://github.com/michaelhenry/KeyboardAvoider

Either wrap the view inside "KeyboardAvoider {}"


Use the ViewModifier ".avoidKeyboard()"

Keyboard Avoidance for SwiftUI Views, Learn how to manage a SwiftUI view when keyboard appears. This uses notification's userInfo to get keyboard height: extension Notification� You can achieve this in SwiftUI by wrapping the RingShape in a Drawing Group. When you create properties on observable objects you get to decide whether changes to each property should force the view to refresh or not. At the time of writing, ScrollView in SwiftUI is not very customizable.

Interactively dismissing a modal view controller with a scroll view, by , My modal view controller contains a scroll view, and I want to interactively be able to dismiss The main problem was that the scroll view's contentOffset , which is used to determine when the interactive transition begins: var canScroll : Bool { get set } PSA: With Xcode 12b3 SwiftUI inputs automatically avoid the keyboard! Unfortunately this implementation doesn't work nicely with a scroll view, and the behaviour is so strange that I can't figure out if it's just a beta issue: the SlideOverCard initially starts moving (for around 10 points) and then the gesture falls through to the underlying scroll view.

UIScrollView Tutorial: Getting Started, Make sure to pin the constraints to the Scroll View and not the Frame Layout Guide, like this: and after zooming in, the user will be able to zoom out to this level, too. To make it more user friendly, the keyboard should also dismiss open the Attributes inspector and check User Interaction Enabled. When the keyboard is displayed, all you have to do is reset the content area of the scroll view and scroll the desired text object into position. Thus, in response to a UIKeyboardDidShowNotification, your handler method would do the following: Get the size of the keyboard. Adjust the bottom content inset of your scroll view by the keyboard height.

Swiftui dismiss alert, 20 Oct 2019 So, let's get ready for this swift ui alert controller tutorial! of SwiftUI tutorials around the web, but I was only able to find just one or two that focuses on In SwiftUI, the modal interaction is fantastic and has a built-in drag to dismiss Sep 24, 2014 � The first thing to do is dismiss the keyboard when the button is� The philosophy for SwiftUI is not to write once, apply everywhere, but to learn once, apply anywhere. For example, modals are automatically contextual giving you the dismiss gesture and sizing them properly for you. Most controls and data work across all platforms, with some minor layout changes and navigation.