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

问题描述

我刚刚与 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)
                        }
                    )
                }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...