【发布时间】:2025-12-30 16:20:08
【问题描述】:
我正在尝试使用 SwiftUI 创建一个 IOS 应用程序,该应用程序使用 NavigationView 并在第一个视图上隐藏导航栏(并且仅在第一个视图上)。
所以我创建了一个 ObservableObject
class NavBarShowViewModel: ObservableObject {
@Published var isHidden: Bool = true
}
在我的内容视图中
struct ContentView: View {
@ObservedObject var navBarShowViewModel = NavBarShowViewModel()
var body: some View {
NavigationView {
Home()
.navigationBarHidden(self.navBarShowViewModel.isHidden)
}
.environmentObject(self.navBarShowViewModel)
}
}
现在我在家里:
struct Home: View {
@EnvironmentObject var navBarShowViewModel: NavBarShowViewModel
var body: some View {
VStack {
HStack {
NavigationLink(destination: FirstPage()) {
Text("Go!")
}
Text("Hello World")
Spacer()
}
.navigationBarTitle("Home")
}
.onAppear(perform: {
self.navBarShowViewModel.isHidden = true
})
}
}
现在FirstPage() 的结构与Home() 完全相同,只是标题不同
.navigationBarTitle("First Page")
并且 onAppear 有以下代码:
.onAppear(perform: {
self.navBarShowViewModel.isHidden = false
})
通过此设置,应用程序可以运行。
但如果在 FirstPage() 内部,我会进一步导航,例如转到 SecondPage()(为简单起见,与 FirstPage() 相同,但标题不同)然后回击直到我返回主页,@987654332 @ 这里Home() 没有被调用,所以它显示了导航栏标题。
有人能解释一下吗?
【问题讨论】: