单击对象后导航会重复多次

Navigation repeats itself several times after clicking the object

我刚刚与 Apple 分享了这个错误。我想和你分享。

申请关注

1 - 用户登录到 onBoardingView 页面后,他们将被定向到具有 fullScreenCover 的 ContentView。

2 - ContentView 页面包含 TabView 中与 ForEach 重复的对象。单击这些对象将带您进入 DetailView 页面。

3 - 但是,单击对象后,导航会自行重复多次。

我的英语不好。对此感到抱歉。

视频是here

项目文件是here

struct OnboardView: View {
    @State var isLogin: Bool = false
    var body: some View {
        
        Button(action: {self.isLogin = true}) {
            Text("Login")
        }
        .fullScreenCover(isPresented: self.$isLogin) {
            ContentView()
        }
    }
}


struct ContentView: View {
    @State var selected: String = ""
    var items: [String] = ["1","2","3","4","5","6","7","8","9","10"]
    var body: some View {
        NavigationView {
            TabView(selection: $selected) {
                ForEach(items, id: \.self) { item in
                    NavigationLink(
                        destination: DetailView(),
                        label: {
                            Text(item)
                                .foregroundColor(.white)
                                .padding()
                                .background(Color.orange)
                                .cornerRadius(10)
                        })
                }
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
            .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
        }
    }
}

在 SwiftUI 中使用 ForEach 时,您必须格外小心 ID。

尝试将项目更改为 items.indices

                ForEach(items.indices, id: \.self) { item in
                    NavigationLink(
                        destination: Text("Detail View"),
                        label: {
                            Text(items[item])
                                .foregroundColor(.white)
                                .padding()
                                .background(Color.orange)
                                .cornerRadius(10)
                        }
                    )
                }