SwiftUI:NavigationLink 无意中可点击并在 Form 内激活
SwiftUI: NavigationLink unintentionally tappable and activated inside Form
我似乎遇到了 NavigationLink
在 Form
中重新格式化的问题。我的 NavigationLink
是通过 isActive
在按下切换 showNext
的按钮时激活的。
问题是 NavigationLink
似乎会自行激活,即使通过点击 Form
似乎为 [=11 创建的空行按钮不存在也是如此=] 应该只是一个 EmptyView
。 Form
似乎甚至为 EmptyViews
创建了行。
所以我在想可能有一些可能的解决方案,但我不确定这些是否可行:
(1) 以某种方式完全隐藏为 NavigationLink
/EmptyView
创建的行,而不禁用导航行为。
(2) 覆盖 NavigationLink
的 Form
格式,使其不会在点击时激活。
编辑: 似乎 .disabled(true)
可以使用选项 2,但空白部分仍然可见,这在这看起来有点老套之外是不可取的。
struct FormView : View {
@State var showNext: Bool = false
var body: some View {
NavigationView {
Form {
Section {
VStack {
Text("Hello")
NavigationLink(destination: Text("Detail View"), isActive: $showNext)
{ EmptyView() }
}
}
}
}
}
}
解决方案是将link隐藏到某些视图的背景中,如下所示
Form {
Section {
VStack {
Text("Hello")
.background(
NavigationLink(destination: Text("Detail View"), isActive: $showNext)
{ EmptyView() }.disabled(!showNext)
)
}
}
}
我似乎遇到了 NavigationLink
在 Form
中重新格式化的问题。我的 NavigationLink
是通过 isActive
在按下切换 showNext
的按钮时激活的。
问题是 NavigationLink
似乎会自行激活,即使通过点击 Form
似乎为 [=11 创建的空行按钮不存在也是如此=] 应该只是一个 EmptyView
。 Form
似乎甚至为 EmptyViews
创建了行。
所以我在想可能有一些可能的解决方案,但我不确定这些是否可行:
(1) 以某种方式完全隐藏为 NavigationLink
/EmptyView
创建的行,而不禁用导航行为。
(2) 覆盖 NavigationLink
的 Form
格式,使其不会在点击时激活。
编辑: 似乎 .disabled(true)
可以使用选项 2,但空白部分仍然可见,这在这看起来有点老套之外是不可取的。
struct FormView : View {
@State var showNext: Bool = false
var body: some View {
NavigationView {
Form {
Section {
VStack {
Text("Hello")
NavigationLink(destination: Text("Detail View"), isActive: $showNext)
{ EmptyView() }
}
}
}
}
}
}
解决方案是将link隐藏到某些视图的背景中,如下所示
Form {
Section {
VStack {
Text("Hello")
.background(
NavigationLink(destination: Text("Detail View"), isActive: $showNext)
{ EmptyView() }.disabled(!showNext)
)
}
}
}