TabView在iOS13 SwiftUI上无法正常工作

时间:2020-11-08 21:36:16

标签: ios view swiftui ios13 tabview

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

TabView实现:

if (readChar())!='[') {
   throw new SyntaxError("must start with '['");
}
for (;;) {
  switch(readChar()) {
     case ']': break;
     case '(': readPair(); break;
     case ',': break;
     default: 
        throw new SyntaxError();
  }
}

void readPair() {
    int key=readNumber();
    if (readChar())!=',') {
          throw new SyntaxError();
    }
    int value=readNumber();
    hashmap.put(key, value);
    if (readChar())!=')') {
          throw new SyntaxError();
    }
}

其中一种视图的实现:

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)
        }
    }
}

我在哪里做错了?

1 个答案:

答案 0 :(得分: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