web-dev-qa-db-fra.com

SwiftUI TabbedView affiche uniquement le contenu du premier onglet

J'essaie de construire un TabbedView avec le code simple suivant:

TabbedView {
    Text("Hello world")
        .tabItemLabel(Text("Hello"))
    Text("Foo bar")
        .tabItemLabel(Text("Foo"))
}

Lors de l'exécution, les deux onglets sont visibles et activés mais le contenu du deuxième onglet ("Foo") est vide.

10
Natanel

Essayez d'ajouter des balises:

    TabbedView {
        Text("Hello world")
            .tabItem { Text("Hello") }
            .tag(0)
        Text("Foo bar")
            .tabItem { Text("Foo") }
            .tag(1)
    }
21
Bradley Hilton

Dans la dernière version, vous devez utiliser TabView:

   TabView {
        AnyView()
            .tabItem {
                Text("Label 1")
            }
        AnyView()
            .tabItem {
                Text("Label 2")
            }
    }
1
Sebastian J. Vogt

J'ai pu résoudre ce problème en ajoutant une variable d'état selection et en la transmettant à la sélection:

struct ContentView : View {
    @State private var selection = 1

    var body: some View {
        TabbedView(selection: $selection) {
            Text("Tab 1!").tabItemLabel(
                Text("Tab 1")).tag(1)
            Text("Tab 2!").tabItemLabel(Text("Tab 2")).tag(2)
        }
    }
}

Maintenant, en appuyant sur "Tab 2" affichera "Tab 2!" sur l'écran, par opposition à un écran vierge.

Cela utilisait Xcode 11.0 beta 2 (11M337n), macOS Catalina 10.15 Beta (19A487l).

1
Mike Buss

Dans Xcode GM, TabbedView a été renommé TabView . Voici donc la bonne façon de créer une barre d'onglets dans SwiftUI maintenant:

  TabView {
        Text("Hello world")
            .tabItem { Text("Hello") }
            .tag(0)
        Text("Foo bar")
            .tabItem { Text("Foo") }
            .tag(1)
    }
1
Tony Hill

// Essayez de cette façon, mais vous ne pouvez pas utiliser une icône de SF Symbols, utilisez les icônes de //icons8.com ou d'une autre plate-forme. ou regardez ce tutoriel https://www.youtube.com/watch?v=3PfCU5h5z94

                 struct ContentView : View {

                 var body : some View {

                     TabbedView {

                         Living_R()
                        .tabItemLabel(VStack {
                            Image("home")
                            Text("Home")
                          }).tag(0)

                    ContentView()
                        .tabItemLabel(VStack {
                            Image("search")
                            Text("Search")
                        }).tag(1)

                        Text("Info")
                        .tabItemLabel(VStack {
                            Image("page")
                            Text("Doc")
                        }).tag(2)
           }   
        }    
    }
0
R29-Future

// Essayez de cette façon, mais vous ne pouvez pas utiliser une icône de SF Symbols, utilisez les icônes de //icons8.com struct ContentView: View {

var corps: certains Voir {

TabbedView {Living_R ()

                        .tabItemLabel(VStack {
                            Image("home")
                            Text("Home")
                          }).tag(0)

                    ContentView()
                        .tabItemLabel(VStack {
                            Image("search")
                            Text("Search")
                        }).tag(1)

                        Text("Info")
                        .tabItemLabel(VStack {
                            Image("page")
                            Text("Doc")
                        }).tag(2)

        }
      }    
    }
0
R29-Future