具有 NavigationView/NavigationLink 延迟跳回的编程式导航

2023-12-24

我创建一个简单的展示 https://github.com/haemi/NavigationProblem哪里可以重现我的问题;我正在做的是从初始视图 => View1 => View2 导航。

从初始视图到 View1 的导航是通过按钮点击进行的,这里没什么特别的。

我的 View1 如下所示:

struct View1: View {
    @ObservedObject private var viewModel = ViewModel()

    private let includeDelay = true

    var body: some View {
        NavigationLink(
            destination: View2(),
            isActive: $viewModel.foo,
            label: {
                Text("View 1")
            })
            .onAppear(perform: {
                DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(includeDelay ? 500 : 0)) {
                    viewModel.doSomething()
                }
            })
    }
}

class ViewModel: ObservableObject {
    @Published var foo = false
    func doSomething() {
        foo = true
    }
}

如果我将延迟包括在内onAppear,它按预期工作;延迟后,我被导航到View2并留在那里。

但是如果我删除延迟(或将其设置为例如 300 毫秒),我会导航到View2,但立即导航回来。我不明白这里发生了什么;为什么是我的$viewModel.foo我设置后设置为 falsetrue?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有 NavigationView/NavigationLink 延迟跳回的编程式导航 的相关文章

随机推荐