【发布时间】:2022-11-29 02:59:15
【问题描述】:
我在使用新 NavigationStack 导航到的列表中有一个 .searchable 修饰符。但是,当视图加载时,搜索框会短暂可见,这看起来很奇怪。我是在错误地使用导航堆栈还是这是某种错误?
这是一个动画 gif,其中放慢了动画速度,因此很容易在列表 1 中看到它。
这是复制它的代码。
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
View1()
.tabItem {
Label("View 1", systemImage: "1.circle")
}
View2()
.tabItem {
Label("View 2", systemImage: "2.circle")
}
}
}
}
struct View1: View {
enum Page {
case listView1
case listView2
}
var body: some View {
NavigationStack {
List {
NavigationLink(value: Page.listView1) {
Text("List View 1")
}
NavigationLink(value: Page.listView1) {
Text("List View 2")
}
}
.navigationDestination(for: Page.self) { page in
switch page {
case .listView1:
ListView1()
case .listView2:
ListView2()
}
}
.navigationTitle("View1")
}
}
}
struct ListView1: View {
@State private var search: String = ""
var body: some View {
List {
ForEach(1..<20) { i in
Text("List \(i)")
}
}
.searchable(text: $search)
.navigationTitle("List View 1")
}
}
struct ListView2: View {
var body: some View {
List {
ForEach(1..<20) { i in
Text("List \(i)")
}
}
.navigationTitle("List View 2")
}
}
struct View2: View {
var body: some View {
Text("View 2")
}
}
【问题讨论】:
-
我不确定它是否会解决问题,但在
navigationDestination内设置一个开关是个坏主意。最好为每种值设置多个 navigationDestinations。 -
@malhal Untofuntanetly,它没有解决问题,但我想知道,对于上述情况,我应该如何使用 navigationDestionation 来显示不同的视图?
标签: swiftui swiftui-navigationstack .searchable