在我的应用程序中,我有一个视图在另一个视图中,我想使用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()
}
}
我附上了一张图片来澄清这个问题。我希望标题保持不变,唯一改变的是列表的一部分。
先谢了!
1条答案
按热度按时间prdp8dxp1#
因此UIKit和SwiftUI重用了一些导航术语,但它们的行为非常不同。
视图和UIView是非常不同的,UIView是直接在屏幕上渲染的对象,使用“draw”函数绘制,而视图只是SwiftUI渲染器的指令。
这与您可以将NavigationView作为子视图并且它仍然可以工作的原因相同。
所以无论如何,tl;dr:这里的方法是放弃SwfitUI导航,而是编写自己的,用“推”动画显示不同的视图,就像NavigationViews基于某个变量所做的那样。