SwiftUI Picker 视图在 TabView 中消失
SwiftUI Picker view disappears in TabView
带有两个选项卡的简单 SwiftUI TabView,每个选项卡上使用一个简单的 Picker 视图。
当应用程序启动时,选择器可见并更新变量。
Select 第二个选项卡,选择器消失。
let names = ["Fred", "Wilma", "Betty", "Barney"]
struct WordPickerView: View {
@State var kind: Int = 0
var body: some View {
VStack {
Text(names[kind])
Picker(selection: $kind, label: EmptyView()) {
ForEach(0 ..< names.count) {index in
Text(names[index]).tag(index)
}
}.pickerStyle(SegmentedPickerStyle())
}
}
}
struct ContentView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection){
WordPickerView()
.font(.title)
.tabItem {
VStack {
Image("first")
Text("First")
}
}
.tag(0)
WordPickerView()
.font(.title)
.tabItem {
VStack {
Image("second")
Text("Second")
}
}
.tag(1)
}
}
}
在这种情况下(当您拥有完全平等的观点时)最好使用 .id
使它们独一无二。
所以你的情况是固定的,比方说,有以下内容
Picker(selection: $kind, label: EmptyView()) {
ForEach(0 ..< names.count) {index in
Text(names[index]).tag(index)
}
}
.pickerStyle(SegmentedPickerStyle())
.id(UUID().uuidString)
带有两个选项卡的简单 SwiftUI TabView,每个选项卡上使用一个简单的 Picker 视图。 当应用程序启动时,选择器可见并更新变量。 Select 第二个选项卡,选择器消失。
let names = ["Fred", "Wilma", "Betty", "Barney"]
struct WordPickerView: View {
@State var kind: Int = 0
var body: some View {
VStack {
Text(names[kind])
Picker(selection: $kind, label: EmptyView()) {
ForEach(0 ..< names.count) {index in
Text(names[index]).tag(index)
}
}.pickerStyle(SegmentedPickerStyle())
}
}
}
struct ContentView: View {
@State private var selection = 0
var body: some View {
TabView(selection: $selection){
WordPickerView()
.font(.title)
.tabItem {
VStack {
Image("first")
Text("First")
}
}
.tag(0)
WordPickerView()
.font(.title)
.tabItem {
VStack {
Image("second")
Text("Second")
}
}
.tag(1)
}
}
}
在这种情况下(当您拥有完全平等的观点时)最好使用 .id
使它们独一无二。
所以你的情况是固定的,比方说,有以下内容
Picker(selection: $kind, label: EmptyView()) {
ForEach(0 ..< names.count) {index in
Text(names[index]).tag(index)
}
}
.pickerStyle(SegmentedPickerStyle())
.id(UUID().uuidString)