11 votes

La liste se cache lors de l'ajout dans le ScrollView SwiftUI

J'ai ajouté un List à l'intérieur de la ScorllView mais il ne s'affiche pas dans le canevas après avoir ajouté inside à ScrollView

voici mon code

struct ContentView: View {
    var body: some View {
        ScrollView {
            VStack {
                Text("My List")
                    .font(.largeTitle)
                    .fontWeight(.bold)

                List(0 ..< 5) { item in
                    Text("Hello World")
                }
            }
        }
    }
}

sw

18voto

Mojtaba Hosseini Points 2525

La question :

C'est parce que List déduire sa taille à partir de son parent View . Ainsi, lorsque vous l'intégrez dans quelque chose comme VStack qui ont une hauteur dynamique, il ne peut pas déduire leur taille correctement.

Solutions :

Vous avez quelques options ici :

1. Taille List pour correspondre automatiquement à son contenu (parfait)

Vous pouvez utiliser ForEach directement au lieu d'utiliser List vous avez alors plus de contrôle sur la taille du contenu.

ForEach(0 ..< 5) { item in
    VStack(alignment: .leading) {
        Text("Hello World").frame(height: 42)
        Divider()
    }.padding(.horizontal, 8)
}

Vous pouvez modifier toutes les tailles et tous les espacements en fonction de vos besoins.


2. Taille List pour faire correspondre son contenu manuellement (Bon mais pas parfait)

Donnez-lui un cadre statique comme vous le faites dans UIKit en fixant le .frame() sur les List :

List(0 ..< 5) { item in
    Text("Hello World")
}.frame(height: 224)

Vous pouvez utiliser <code>GeometryReader</code> pour trouver la taille exacte du parent et l'appliquer au <code>List</code>


3. Montrez simplement le List (Pas bon mais ça marche)

ajouter .scaledToFill() modificateur pour List

8voto

Asperi Points 123157

Je suppose que vous vous attendiez à ce qui suit :

var body: some View {
    GeometryReader { geometry in
        ScrollView {
           VStack {
               Text("My List")
                   .font(.largeTitle)
                   .fontWeight(.bold)

                List {
                    ForEach(0 ..< 50) { item in // 50 for testing
                        Text("Hello World")
                    }
                }
            }
            .frame(height: geometry.size.height)
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X