Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 迅捷:一种奇怪的行为_Ios_Swift_Swiftui - Fatal编程技术网

Ios 迅捷:一种奇怪的行为

Ios 迅捷:一种奇怪的行为,ios,swift,swiftui,Ios,Swift,Swiftui,我正在尝试使用SwiftUI创建一个IOS应用程序,它使用NavigationView,并在第一个视图上隐藏导航栏(并且仅在第一个视图上) 所以我创建了一个可观察的对象 class NavBarShowViewModel:ObserveObject{ @已发布变量isHidden:Bool=true } 在我的内容视图中 struct ContentView:View{ @ObservedObject变量navBarShowViewModel=navBarShowViewModel() var

我正在尝试使用SwiftUI创建一个IOS应用程序,它使用
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进行测试

非常感谢您的回答,它很有效。有时会显示导航栏,例如,当我从窗体的选择器返回到视图时,然后在主视图中。你知道吗?再次感谢