【问题标题】:OnAppear and OnDisappear are not triggered on first view transitionOnAppear 和 OnDisappear 不会在第一次视图转换时触发
【发布时间】:2021-08-06 16:35:46
【问题描述】:

我有一个使用以下布局的 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 操作仅在从一个视图转换到另一个视图第二次后才会执行。第一次向右滑动时,没有任何反应。

【问题讨论】:

  • 你应该把它放在导航视图的末尾

标签: swift xcode swiftui watchos


【解决方案1】:

您应该提供一个可重现的最小示例(请参阅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()
    }
}

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2015-12-05
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多