【发布时间】:2021-09-15 10:13:41
【问题描述】:
我的应用有一个显示选项列表的主屏幕和几个完全不同的页面。每个都指向一个带有标签的调度程序视图,该标签指示要显示哪个页面。我还希望能够在页面之间滑动。所以我有这段代码(当然,从实际应用程序中大大简化,但行为方式相同):
struct Tab: Hashable {
let name: String
let id: Int
}
struct ContentView: View {
let tabs: [Tab] = [Tab(name: "first", id: 1), Tab(name: "second", id: 2), Tab(name: "third", id: 3)]
var body: some View {
NavigationView {
Form {
List (tabs, id: \.self) { tab in
NavigationLink(destination: Dispatcher(which: tab.id)) {
VStack (alignment: .leading) {
Text(tab.name).font(.headline).bold()
}
}
}
}.navigationTitle("test")
Text("hello")
}
}
}
struct Dispatcher: View {
var which: Int
@State private var tab = 2
var body: some View {
TabView(selection: $tab) {
Text("first page").tag(1)
Text("second page").tag(2)
Text("third page").tag(3)
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
.onAppear(perform: { tab = which })
}
}
在 iPhone 上,它运行良好。但是在 iPad 上,无论在哪个方向,点击主页中的任何选项都会将我带到相同的子页面,该子页面由 @State 变量选项卡的初始值设置。 .onAppear 中的赋值正在执行,但 tab 的新值被忽略。
感谢您的任何想法。
杰里米
【问题讨论】: