Ios 迅捷:一种奇怪的行为
我正在尝试使用SwiftUI创建一个IOS应用程序,它使用Ios 迅捷:一种奇怪的行为,ios,swift,swiftui,Ios,Swift,Swiftui,我正在尝试使用SwiftUI创建一个IOS应用程序,它使用NavigationView,并在第一个视图上隐藏导航栏(并且仅在第一个视图上) 所以我创建了一个可观察的对象 class NavBarShowViewModel:ObserveObject{ @已发布变量isHidden:Bool=true } 在我的内容视图中 struct ContentView:View{ @ObservedObject变量navBarShowViewModel=navBarShowViewModel() var
NavigationView
,并在第一个视图上隐藏导航栏(并且仅在第一个视图上)
所以我创建了一个可观察的对象
class NavBarShowViewModel:ObserveObject{
@已发布变量isHidden:Bool=true
}
在我的内容视图中
struct ContentView:View{
@ObservedObject变量navBarShowViewModel=navBarShowViewModel()
var body:一些观点{
导航视图{
Home()
.navigationBarHidden(self.navBarShowViewModel.isHidden)
}
.environmentObject(self.navBarShowViewModel)
}
}
现在在家里,我有:
struct Home:视图{
@环境对象变量navBarShowViewModel:navBarShowViewModel
var body:一些观点{
VStack{
HStack{
导航链接(目标:第一页()){
文本(“开始!”)
}
文本(“你好,世界”)
垫片()
}
.navigationBarTitle(“主页”)
}
.onAppear(表演:{
self.navBarShowViewModel.ishiden=true
})
}
}
现在FirstPage()
的结构与Home()
完全相同,只是标题不同
.navigationBarTitle(“第一页”)
onAppear具有以下代码:
.onAppear(执行:{
self.navBarShowViewModel.isHidden=false
})
通过此设置,应用程序可以正常工作
但是,如果在FirstPage()
内我导航得更远,例如转到SecondPage()
(为了简单起见,这与FirstPage()
相同,但标题不同),然后回击直到我返回主页,则不会调用Home()
上出现的onAppear
,因此,它显示了导航栏标题
有人能解释一下吗?这是关于SwiftUI引擎如何跟踪视图以及它是否真的出现。。。无论如何,可以确定它是什么,因为它是子视图在导航堆栈上的显示/消失方式,所以可能的解决方案是在
第一页中添加onDisappear
,如
struct FirstPage: View {
@EnvironmentObject var navBarShowViewModel: NavBarShowViewModel
var body: some View {
... other code here
.onAppear(perform: {
self.navBarShowViewModel.isHidden = false
})
.onDisappear(perform: {
self.navBarShowViewModel.isHidden = true
})
}
}
使用Xcode 12.4/iOS 14.4进行测试非常感谢您的回答,它很有效。有时会显示导航栏,例如,当我从窗体的选择器返回到视图时,然后在主视图中。你知道吗?再次感谢