OnAppear 和 OnDisappear 不会在第一次视图转换时触发

问题描述

我有一个使用以下布局的 watchOS 应用程序:

NavigationView {
    if !HKHealthStore.isHealthDataAvailable() {
        ContentNeedHealthKitView()
    } else if !isAuthorized {
        ContentUnauthorizedView()
    } else {
        TabView(selection: $selection) {
            WeightView()
                .navigationTitle("Weight")
                .tag(1)
                .onAppear {
                    print("Appear!")
                }
                .onDisappear {
                    print("Disappear!")
                }
            SettingsView()
                .navigationTitle("Settings")
                .tag(2)
        }
    }
}

遗憾的是,OnAppearOnDisappear 操作仅在从视图转换到另一个第二次后执行。第一次向右滑动时,什么也没有发生。

解决方法

您应该提供一个最小的可重现示例(请参阅 https://stackoverflow.com/help/minimal-reproducible-example)。

你的行也产生了编译器错误。使用 onAppear 的正确方法是这样的:

.onAppear {

}

这是一个工作示例,一切都按预期工作。您还应该将 onAppear ViewModifier 放置到子视图中。

import SwiftUI

struct WeightView: View {
    var body: some View {
        Text("WeightView")
         .onAppear {
            print("Appear!")
         }
         .onDisappear {
            print("Disappear!")
         }
    }
}

struct SettingsView: View {
    var body: some View {
        Text("SettingsView")
    }
}

struct ContentView: View {
    @State var selection = 1
    @State var isAuthorized = false

    var body: some View {
        NavigationView {
            if !isAuthorized {
                Button("authorize") {
                    isAuthorized.toggle()
                }
            } else {
                TabView(selection: $selection) {
                    WeightView()
                        .navigationTitle("Weight")
                        .tag(1)
                    SettingsView()
                        .navigationTitle("Settings")
                        .tag(2)
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...