我已经阅读了有关该问题的现有线程,并且评论表明这是一个错误并已在 11.7 上修复,但我仍在该版本上遇到它。
总之:
当应用程序启动时,您的视图View 1会触发 onAppear。
当我使用 Navigation Controller导航到子视图(View 2)时,没有为View 1触发 onDisappear ,但为View 2触发了 onAppear 。
当您导航回View 1 时,您不会获得View 1的 onAppear 或(view 2)的 onDisappear。
当视图出现/消失时,是否有一种可靠的方法来触发事件?或者我应该尝试跳到 Xcode 测试版?
示例代码:
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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
您已将onAppear {..}和添加onDisappear {..}到NavigationView 中,该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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
ContentView onAppear fired
DetailView onAppear fired
ContentView onDisappear fired
ContentView onAppear fired
DetailView onDisappear fired
Run Code Online (Sandbox Code Playgroud)
谢谢!?
| 归档时间: |
|
| 查看次数: |
4194 次 |
| 最近记录: |