SwiftUI Picker 视图在 TabView 中消失

Posted

技术标签:

【中文标题】SwiftUI Picker 视图在 TabView 中消失【英文标题】:SwiftUI Picker view disappears in TabView 【发布时间】:2019-12-22 04:06:04 【问题描述】:

带有两个选项卡的简单 SwiftUI TabView,每个选项卡上使用一个简单的 Picker 视图。 当应用程序启动时,Picker 可见并更新变量。 选择第二个选项卡,选择器消失。

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)
        
    

【问题讨论】:

【参考方案1】:

在这种情况下(当您拥有绝对平等的观点时)最好使用.id 使它们独一无二。

所以你的情况是固定的,比方说,如下

  Picker(selection: $kind, label: EmptyView()) 
    ForEach(0 ..< names.count) index in
      Text(names[index]).tag(index)
    
  
  .pickerStyle(SegmentedPickerStyle())
  .id(UUID().uuidString)

【讨论】:

来自 Apple 的一些好消息。此错误已在 ios 13.4 中修复。您无需向 Picker 添加 id。 每次创建View时添加不同的id,会导致奇怪的动画效果

以上是关于SwiftUI Picker 视图在 TabView 中消失的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有额外空间的情况下更改 SwiftUI Picker 视图大小?

为 SwiftUI 寻找一个简单的自定义视图:picker

SwiftUI 从另一个视图中捕获 Picker 值

SwiftUI Picker 视图中不显示值

视图中的 SwiftUI Picker 会在点击时自行禁用

如何让 SwiftUI Picker 在子视图中工作? (变灰)