我正在尝试在SwiftUI的List或ForEach循环中使用NavigationLink。不幸的是,我得到了一个非常奇怪的行为(例如,当点击Leo时,它会打开Karl,打开Max也指向Karl)。
我已经发现这与NavigationLink中的“isActive”属性有关。不幸的是,我需要它才能实现这里的行为:https://istack.dev59.com/g0BFz.gif,这也在这里SwiftUI - 嵌套的NavigationView:返回到根视图中提出。
我还尝试使用selection和tag属性,但我无法实现“返回到根”的机制。
这是示例:
import SwiftUI
struct Model: Equatable, Hashable {
var userId: String
var firstName: String
var lastName: String
}
struct ContentView: View {
@State var navigationViewIsActive: Bool = false
var myModelArray: [Model] = [
Model(userId: "27e880a9-54c5-4da1-afff-05b4584b1d2f", firstName: "Leo", lastName: "Test"),
Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Max", lastName: "Test"),
Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Karl", lastName: "Test")]
var body: some View {
NavigationView {
List(myModelArray, id: \.self) { model in
NavigationLink(destination: secondView(firstName: model.firstName), isActive: $navigationViewIsActive){ Text(model.firstName) }
}
.listStyle(PlainListStyle())
}
}
}
struct secondView: View {
@State var firstName: String
var body: some View {
NavigationView {
Text(firstName)
.padding()
}
}
}
谢谢!
self.navigationViewIsActive = true
明确地包装在withAnimation
块中有所帮助,因为有时候,传入的视图无法进行动画处理(显然是某些错误)。 - Konstantinos Kontos