【发布时间】:2022-01-07 15:33:06
【问题描述】:
我对 SwiftUI 导航有疑问。为了说明这个问题,我做了一个汽车列表的简单示例,如果用户点击它,它会显示汽车详细信息:
struct ContentView: View {
var cars = [Car(name: "A"), Car(name: "B"), Car(name: "C"), Car(name: "D")]
var body: some View {
NavigationView {
LazyVStack(spacing: 10) {
ForEach(cars, id: \.self) { car in
NavigationLink(destination: {
CarDetailsView(viewModel: CarDetailsViewModel(car: car))
},
label: {
CarRowView(car: car)
})
}
}
}
}
}
struct CarDetailsView: View {
@StateObject var viewModel: CarDetailsViewModel
@Environment(\.presentationMode) private var presentationMode
var body: some View {
Button("Back") {
presentationMode.wrappedValue.dismiss()
}
}
}
class CarDetailsViewModel: ObservableObject {
@Published var car: Car
init(car: Car) {
self.car = car
}
}
struct Car: Hashable {
var name: String
}
struct CarRowView: View {
var car: Car
var body: some View {
Text(car.name)
}
}
当您当时选择一辆车时,这很有效。不幸的是,使用 swiftUI 我无法禁用多选。如果用户同时选择多辆汽车,然后有时会返回汽车列表,我会收到错误日志:
SwiftUI encountered an issue when pushing aNavigationLink. Please file a bug.
此时,汽车列表不再响应。它需要很少的尝试,但它最终会发生。到目前为止,我只能在 iOS 15 上复制它。我也尝试在没有 viewModel 的情况下这样做,但它仍然会发生。 理想情况下,我希望将 NavigationLink 保留在 VStack 中,因为当用户选择它时,它会使行变暗。
【问题讨论】:
标签: swiftui swiftui-navigationlink swiftui-navigationview