Disable drag to dismiss in SwiftUI Modal

iOS 15+

Starting from iOS 15 we can use interactiveDismissDisabled:

func interactiveDismissDisabled(_ isDisabled: Bool = true) -> some View

We just need to attach it to the sheet. Here is an example from the documentation:

struct PresentingView: View {
    @Binding var showTerms: Bool

    var body: some View {
        AppContents()
            .sheet(isPresented: $showTerms) {
                Sheet()
            }
    }
}

struct Sheet: View {
    @State private var acceptedTerms = false
    
    var body: some View {
        Form {
            Button("Accept Terms") {
                acceptedTerms = true
            }
        }
        .interactiveDismissDisabled(!acceptedTerms)
    }
}

Leave a Comment