在SwiftUI Modal中禁用拖动以关闭

Rob*_*lor 10 swiftui

我已经介绍了一个模式视图,但是我希望用户先经历一些步骤才能将其关闭。当前可以拖动视图以将其关闭。

有没有办法阻止这种可能性?

我已经看过WWDC会议的视频,他们提到了它,但是我似乎没能确切地知道我需要的代码。

struct OnboardingView2 : View {

    @Binding
    var dismissFlag: Bool

    var body: some View {

        VStack {
            Text("Onboarding here! ")
            Button(action: {
                self.dismissFlag.toggle()
            }) {
                Text("Dismiss")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我目前有一些文本和一个按钮,以后会使用它来关闭视图。

paw*_*222 27

iOS 15+

从 iOS 15 开始我们可以使用interactiveDismissDisabled

func interactiveDismissDisabled(_ isDisabled: Bool = true) -> some View
Run Code Online (Sandbox Code Playgroud)

我们只需要将它附加到纸张上即可。这是文档中的示例:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)


sam*_*ize 10

如果您使用 3rd party lib Introspect,这很容易,它非常有用,因为它可以轻松访问相应的 UIKit 组件。在这种情况下,属性UIViewController

VStack { ... }
.introspectViewController {
    $0.isModalInPresentation = true
}
Run Code Online (Sandbox Code Playgroud)


小智 0

我在这里有一个类似的问题

struct Start : View {
let destinationView = SetUp()
    .navigationBarItem(title: Text("Set Up View"), titleDisplayMode: .automatic, hidesBackButton: true)

var body: some View {
    NavigationView {
        NavigationButton(destination: destinationView) {
            Text("Set Up")

        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这里最主要的是它隐藏了后退按钮。这会关闭后退按钮,并使用户无法刷回以太币。

对于应用程序的设置部分,您可以创建一个新的 SwiftUI 文件并添加类似的内容以回家,同时还可以合并您自己的设置代码。

struct SetUp : View {

    let destinationView = Text("Your App Here")
        .navigationBarItem(title: Text("Your all set up!"), titleDisplayMode: .automatic, hidesBackButton: true)

 var body: some View {
    NavigationView {
        NavigationButton(destination: destinationView) {
            Text("Done")

        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)