SwiftUI:如何从 sheet 显示全屏视图

7

目前,我的表格中有一个导航链接。它会在该表格内创建一个新页面而不是占据整个屏幕。是否有一种方法可以关闭该表格并在原始屏幕上呈现视图?

带有按钮拉起表格的原始视图:

Button {
    userTappedItem = item
} label: {
    ...
}
.sheet(item: $userTappedItem) {
} content: { item in
    NewView(item: item)
}

NewView 中的 NavigationLink:

NavigationLink {
    ViewIWantAsFullScreen()
} label: {
    ...
}
1个回答

6

是的,这是可以做到的。最重要的部分是在关闭表单和呈现全屏覆盖之间的延迟时间 -- 没有这个延迟时间,全屏覆盖 View 就会替换表单的内容。

struct ContentView  : View {
    @State private var sheetDisplayed = false
    @State private var fullScreenDisplayed = false
    
    var body: some View {
        VStack {
            Button("Show Sheet") {
                sheetDisplayed.toggle()
            }.sheet(isPresented: $sheetDisplayed) {
                SheetView(closeAndDisplayFullScreen: {
                    sheetDisplayed = false
                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                        fullScreenDisplayed = true
                    }
                    
                })
            }
        }.fullScreenCover(isPresented: $fullScreenDisplayed) {
            FullScreenView()
        }
    }
}

struct SheetView : View {
    var closeAndDisplayFullScreen : () -> Void
    
    var body: some View {
        Button("Show full screen after dismiss") {
            closeAndDisplayFullScreen()
        }
    }
}

struct FullScreenView : View {
    var body: some View {
        Text("Full screen")
    }
}

成功了!非常感谢你! - fballjeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接