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)
问题是您在 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)