程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OnAppear 和 OnDisappear 不会在第一次视图转换时触发大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决OnAppear 和 OnDisappear 不会在第一次视图转换时触发?

开发过程中遇到OnAppear 和 OnDisappear 不会在第一次视图转换时触发的问题如何解决?下面主要结合日常开发的经验,给出你关于OnAppear 和 OnDisappear 不会在第一次视图转换时触发的解决方法建议,希望对你解决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()
    }
}

大佬总结

以上是大佬教程为你收集整理的OnAppear 和 OnDisappear 不会在第一次视图转换时触发全部内容,希望文章能够帮你解决OnAppear 和 OnDisappear 不会在第一次视图转换时触发所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。