【发布时间】:2021-01-31 21:48:29
【问题描述】:
在 ForEach 之后在视图底部使用 NavigationLink 时,如果它不可见,它将无法工作。
我有一个按钮列表。如果按下按钮,它会将 Bool 设置为 true。这个布尔值现在显示了一个 NavigationLink,它会立即激活,因为传递的绑定设置为 true。 但是,如果数组太长,则链接将不起作用,因为一旦按下第一个按钮,它将看不见。
这是我的代码:
import SwiftUI
struct TestLinkView: View {
@State private var linkIsActive = false
var body: some View {
NavigationView {
VStack {
Button(action: {
linkIsActive = true
}) {
Text("Press")
}
NavigationLink(destination: ListView(linkIsActive: $linkIsActive), isActive: $linkIsActive) {
Text("Navigation Link")
}
}
}
}
}
struct ListView: View {
var nameArray = ["Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10","Name11","Name12","Name13","Name14","Name15","Name16","Name17","Name18","Name19","Name20" ]
@State private var showLink: Bool = false
@State private var selectedName: String = ""
@Binding var linkIsActive: Bool
var body: some View {
Form {
ForEach(nameArray, id: \.self) { name in
Button(action: {
selectedName = name
showLink = true
}) {
Text(name)
}
}
if showLink {
NavigationLink(destination: NameView(selectedName: selectedName), isActive: $linkIsActive) {
EmptyView()
}
}
}
.navigationBarTitle("ListView")
}
}
struct NameView: View {
var selectedName: String
var body: some View {
Text(selectedName)
.navigationBarTitle("NameView")
}
}
可行的方法是在按钮标签内传递带有 if 条件的 NavigationLink。但是,如果我这样做,动画将不再起作用。
【问题讨论】: