SwiftUI 中的生命周期:运行 离开 NavigationView 层次结构的子视图时的代码

Lifecycling in SwifUI: Running code when leaving a child view of a NavigationView hierarchy

借助 SwiftUI 的 NavigationView,我们受益于代码构建的简单性。然而,没有暴露,至少在这些早期阶段是覆盖。此外,减少对管理视图生命周期的关注使得很难根据视图的状态找出调用什么以及何时调用某些东西。

当用户选择返回 NavigationView 层次结构时(即单击 NavigationView 提供的后退按钮),我想 运行 一些代码。

我试过 onDisappear() {} 和它的其他变体,但我无法让它工作。好像没叫。 onAppear() {} 确实有效,所以我很困惑。

任何帮助将不胜感激!

我很确定在这个阶段,没有任何方法可以被重写以捕捉导航视图的 'back' 动作。

但是,我确实发现我可以隐藏 NavigationView 的后退按钮并自己添加一个自定义按钮,我可以在关闭子项之前调用代码。

import SwiftUI

struct SecondView: View {
    var body: some View {


        Text("Second View")
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: NavigationViewCustomBack())
    }


}


==========================

import SwiftUI

struct NavigationViewCustomBack: View {
    var body: some View {
        HStack{
                Image(systemName: "chevron.left").foregroundColor(.blue).font(Font.title.weight(.medium))
                Text("Home").padding(.leading, -5)
            }
    }
}

struct NavigationViewCustomBack_Previews: PreviewProvider {
    static var previews: some View {
        NavigationViewCustomBack()
    }
}