xcode 视图中嵌入的NavigationStack

ergxz8rk  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(132)

在我的应用程序中,我有一个视图在另一个视图中,我想使用NavigationStack从子视图导航到另一个视图,问题是导航发生在顶级视图级别。
我只想用另一个带导航的子视图来替换这个子视图。在UIKit中它工作得很好(带ContainerView),但是我找不到用SwiftUI来做这件事的方法。
我附上一些简化的应用程序代码。

@available(iOS 16.0, *)
struct PruebaNavigationInside: View {
    var body: some View {
        NavigationStack {
            VStack {
                HeaderView()
                NotesView()
            }
        }
    }
}

@available(iOS 16.0, *)
struct HeaderView: View {
    var body: some View {
        VStack {
            Text("Header")
                .padding()
            Image(systemName: "globe")
        }
        .font(.largeTitle)
        .bold()
        .padding()
    }
}
    
@available(iOS 16.0, *)
struct NotesView: View {
    var body: some View {
        List {
            ForEach(1..<10, id:\.self) { i in
                
                NavigationLink("Not2 \(i)") {
                    NoteDetailView(note: "Note \(i)")
                }
            }
            
        }
    }
}
@available(iOS 16.0, *)
struct NoteDetailView: View {
    
    var note: String
    
    var body: some View {
        Text(note)
    }
}

@available(iOS 16.0, *)
struct PruebaNavigationInside_Previews: PreviewProvider {
    static var previews: some View {
        PruebaNavigationInside()
    }
}

我附上了一张图片来澄清这个问题。我希望标题保持不变,唯一改变的是列表的一部分。

先谢了!

prdp8dxp

prdp8dxp1#

因此UIKit和SwiftUI重用了一些导航术语,但它们的行为非常不同。
视图和UIView是非常不同的,UIView是直接在屏幕上渲染的对象,使用“draw”函数绘制,而视图只是SwiftUI渲染器的指令。
这与您可以将NavigationView作为子视图并且它仍然可以工作的原因相同。
所以无论如何,tl;dr:这里的方法是放弃SwfitUI导航,而是编写自己的,用“推”动画显示不同的视图,就像NavigationViews基于某个变量所做的那样。

相关问题