在NavigationUI,SwiftUI上创建视图

问题描述

我正在创建嵌入在ZStack中的视图,如下所示:

ZStack(alignment: .top) {
        
    content
        
        if self.show {
                                
                vstack {
                    
                    HStack {

这是一个viewModifier,因此我在主视图中使用例如.showView()调用它。

但是发生的是,如果我有NavigationView,则此视图仅显示在navigationView下方。 (我的视图上有一个NavigationViewTitle)。

如何解决此问题?我在考虑一些zIndex,但是它不起作用。我还考虑过该.showView()的更好放置,但无关紧要。

解决方法

这里是一种可能方法的演示(可以添加动画/过渡,但没有主题)。使用Xcode 11.4 / iOS 13.4编写并测试的演示

demo

struct ShowViewModifier<Cover: View>: ViewModifier {
    let show: Bool
    let cover: () -> Cover

    func body(content: Content) -> some View {
        ZStack(alignment: .top) {
            content
            if self.show {
                cover()
            }
        }
    }
}

struct DemoView: View {
    @State private var isPresented = false
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("Link",destination: Button("Details")
                    { self.isPresented.toggle() })
                Text("Some content")
                    .navigationBarTitle("Demo")
                Button("Toggle") { self.isPresented.toggle() }
            }
        }
        .modifier(ShowViewModifier(show: isPresented) {
            Rectangle().fill(Color.red)
                .frame(height: 200)
        })
    }
}