4 pièce(s) jointe(s)
SWIFTUI TabView dans scrollview frame hauteur réduite
Salut,
Je code depuis peu en Swiftui et j'ai un souci que j'arrive pas à résoudre, si quelqu'un a la solution cela fait plusieurs jours que je bloque là dessus.
J'ai un feed avec des posts qui défilent verticalement. Chaque post comprend un titre un text mais aussi en bas une liste de photos. Ces photos sont affichées dans un tabview qui a un effet de page horizontal.
Mon souci est que le tabview ne prend pas la hauteur de l'image. (Il a une hauteur de 10 j'ai vu ça en utilisant geometryreader et en logant la hauteur. Ce n'est pas étonnant puisqu'il est dans une scrollview donc il a une place disponible infinie je suppose).
Je peux lui donner une taille fixe et cela fonctionne :
Pièce jointe 643450
mais ce n'est pas ce que je veux faire. Je veux que le tabview prenne une hauteur dynamiquement par rapport aux images qui sont à l’intérieur. Je ne veux pas les bordure blanches qu'on peut voir à droite et à gauche de l'image.
Et voici le code :
import SwiftUI
struct PostView: View {
var post: Post
var body: some View {
VStack (alignment: .leading){
HStack {
Image(systemName: "person")
.padding()
Text("Pseudonyme")
Spacer()
Text("Il y a 1 heure")
Button {
} label: {
Image(systemName: "ellipsis.circle").padding().foregroundColor(Color.black)
}
}
Text("Voici le titre")
.bold()
.padding(.horizontal)
Text("Voici le texte du post\n qui peut avoir plusieurs lignes")
.padding(.horizontal)
GeometryReader { geo in
TabView() {
Image(systemName: "house")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: geo.size.width)
.foregroundColor(Color.blue)
.background(Color.red)
// Image(systemName: "house.fill")
// .resizable()
// .aspectRatio(contentMode: .fit)
// .frame(width: geo.size.width)
}
.tabViewStyle(.page(indexDisplayMode: .always))
//effet de pagination
// .frame(height: TAILLE DYNAMIQUE)
}
}
.background(Color.white)
.cornerRadius(12)
.padding(.all, 4)
}
}
struct PostView_Previews: PreviewProvider {
static var previews: some View {
ScrollView{
VStack {
PostView(post: Post.test)
PostView(post: Post.test)
//plusieurs posts un à la suite de l'autre verticalement
}
}
}
}
J'ai simplifié le code avec des images déjà stockées des icons mais par la suite il y aura des images incluent dans le post, de toute dimensions et récupérées via internet.
Si quelqu'un a une idée j'ai cherché sur internet j'ai l'impression d'avoir trouvé mon problème chez d'autres personne mais je n'ai jamais compris la solution.
Je vous transmet aussi les capture d'écran du bug :
Pièce jointe 643449
et de l’apparence souhaitée (mais sans l'effet de pagination...) :
Pièce jointe 643448
Est ce qu'il existe une bibliothèque qui facilite la gestion des tailles en swiftui ? Je viens de kotlin et les wrap_content et match_parent me manquent.
Merci beaucoup pour votre aide