SwiftUI NavigationLink 错误(SwiftUI 在推送导航链接时遇到问题。请提交错误。)

Ufu*_*ker 7 swiftui swiftui-navigationlink

控制台错误: SwiftUI 在推送导航链接时遇到问题。请提交错误。

NavigationLink 中不使用 isActive 参数是没有问题的。但是,我必须使用 isActive 参数。因为我相应地关闭了下拉列表。

菜单型号:

struct Menu: Identifiable {
    var id: Int
    var pageName: String
    var icon: String
    var page: Any
    var startDelay: Double
    var endDelay: Double
//    var offsetY: CGFloat
}

let menu = [
    Menu(id: 1, pageName: "Profil", icon: "person.crop.circle", page: ProfileView(), startDelay: 0.2, endDelay: 0.6),
    Menu(id: 2, pageName: "Sepet", icon: "cart", page: CartView(), startDelay: 0.4, endDelay: 0.4),
    Menu(id: 3, pageName: "?stek", icon: "plus.circle", page: ClaimView(), startDelay: 0.6, endDelay: 0.2)
]
Run Code Online (Sandbox Code Playgroud)

菜单视图

struct MenuView: View {
    @State var isShownMenu: Bool = false
    @State var isPresented: Bool = false
    var body: some View {
        VStack(spacing: 40) {
            
            Button(action: {self.isShownMenu.toggle()}) {
                MenuViewButton(page: .constant((Any).self), icon: .constant("rectangle.stack"))
            }
            VStack(spacing: 40) {
                ForEach(menu, id: \.id) { item in
                    
                    NavigationLink(
                        destination: AnyView(_fromValue: item.page),
                        isActive: self.$isPresented,
                        label: {

                            MenuViewButton(page: .constant(item.page), icon: .constant(item.icon))
                        .animation(Animation.easeInOut.delay(self.isShownMenu ? item.startDelay : item.endDelay))
                        .offset(x: self.isShownMenu ? .zero : UIScreen.main.bounds.width)//, y: item.offsetY)
                }
            }
            .onChange(of: isPresented, perform: { value in
                if value == true {
                    self.isShownMenu = false
                }
            })
            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*kov 5

问题是您在 ForEach 循环中放置了带有“IsActive”参数的 NavigationLink!您需要从循环中删除 NavigationLink 并在那里传输必要的数据,例如,通过视图模型。

总结:您应该只有一个 NavigationLink 与一个特定的 isActive 参数相关联。

 ForEach(yourData) { dataItem in
     Button {
         selectedItem = dataItem
         isActivated = true
     } label: {
         Text("\(dataItem)")            
     }
 }
 .background(
     NavigationLink(destination: DestinationView(data: selectedItem),
                    isActive: $isActivated) {EmptyView()}
 )
Run Code Online (Sandbox Code Playgroud)