TabView 在 iOS13 SwiftUI 上无法正常工作

Posted

技术标签:

【中文标题】TabView 在 iOS13 SwiftUI 上无法正常工作【英文标题】:TabView does not work correctly on iOS13 SwiftUI 【发布时间】:2020-11-08 21:36:16 【问题描述】:

我创建了一个包含 4 个项目的 TabView,但在 ios 13.x 中,只有第一个视图可以正确显示。 当我单击另一个项目的图标时,视图未正确显示,但应用程序仅显示白色视图。如果我在 iOS > 14 上运行该应用程序,我可以正确查看所有视图。

TabView 实现:

struct ContentView: View 

private enum Tab: Hashable 
       case discovery
       case qrcode
       case devices
       case settings

   
@State private var selectedTab: Tab = .discovery

var body: some View 
    NavigationView 
    TabView(selection: $selectedTab) 
        DiscoveryView()
            .tabItem 
                VStack 
                    Image(systemName: "lock.rotation.open")
                    Text("Discovery")
                
            
            .tag(0)
        QrCodeView()
            .tabItem 
                VStack 
                    Image(systemName: "qrcode.viewfinder")
                    Text("QrCode")
                
            
            .tag(1)
        DevicesView()
            .tabItem 
                VStack 
                    Image(systemName: "qrcode.viewfinder")
                    Text("My devices")
                
            
            .tag(2)
        SettingsView()
            .tabItem 
                VStack 
                    Image(systemName: "gear")
                    Text("Settings")
                
            
            .tag(3)
        
    

其中一种观点的实现:

struct QrCodeView: View 
    var body: some View  
        Text("QrCode")
    

我哪里做错了?

【问题讨论】:

【参考方案1】:

这可能是selection的原因...selectiontag类型应该相同,所以试试

@State private var selectedTab: Tab = .discovery

var body: some View 
    NavigationView 
    TabView(selection: $selectedTab) 
        DiscoveryView()
            .tabItem 
                VStack 
                    Image(systemName: "lock.rotation.open")
                    Text("Discovery")
                
            
            .tag(.discovery)      // << here !!

        QrCodeView()
            .tabItem 
                VStack 
                    Image(systemName: "qrcode.viewfinder")
                    Text("QrCode")
                
            
            .tag(.qrcode)        // << here !!

 // ... others the same

【讨论】:

以上是关于TabView 在 iOS13 SwiftUI 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中构建一个自定义的类 TabView 视图

如何在 SwiftUI 中垂直居中纯文本 TabBar 按钮?

Lottie 动画在 SwiftUI 的最后一个 TabView 页面上消失

SwiftUI:在 Tabview 的 WatchOS 8.1RC 上立即弹出 NavigationLink

iOS 14.2 中的 SwiftUI PageTabView 性能问题滞后

更改页面时,SwiftUI TabView 内存占用不断增加