我已经阅读了this existing thread的相关问题,并且评论表明这是一个错误,已在11.7中修复,但是我仍在该版本上遇到它。
总结:
应用启动时,您的视图视图1 会触发onAppear。
当我使用导航控制器导航到子视图(视图2 )时,没有为视图1 触发onDisappear,但是为触发了onAppear >查看2 。
当您导航回到 View 1 时,对于 View 1 您不会看到onAppear,对于(view 2)也不会看到onDisappear。
是否存在一种解决方法,可以可靠地在视图出现/消失时触发事件?还是应该尝试跳到Xcode Beta?
示例代码:
import SwiftUI
struct DetailView: View {
var body: some View {
Text("Detail view")
.onAppear(){
print("DetailView onAppear fired")
}
.onDisappear(){
print("DetailView onDisappear fired")
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: DetailView()) {
Text("Show detail view")
}
.navigationBarTitle("Master view")
}
.onAppear(){
print("ContentView onAppear fired")
}
.onDisappear(){
print("ContentView onDisappear fired")
}
}
}
答案 0 :(得分:1)
您已将onAppear {..}
和onDisappear {..}
添加到 NavigationView 中,该视图仍然可见/显示在 DetailView 中。我想,您得到的是预期的行为。 onDisappear {..}
仅在视图离开屏幕时才会被调用。
在您的文本视图中添加onAppear {..}
和onDisappear {..}
将得到预期的结果。
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: DetailView()) {
Text("Show detail view")
.onAppear {
print("ContentView onAppear fired")
}
.onDisappear {
print("ContentView onDisappear fired")
}
}
.navigationBarTitle("Master view")
}
}
}
ContentView onAppear fired
DetailView onAppear fired
ContentView onDisappear fired
ContentView onAppear fired
DetailView onDisappear fired
谢谢! ??