web-dev-qa-db-fra.com

Faire en sorte que le contenu ScrollView remplisse son parent dans SwiftUI

J'adorerais construire un écran de défilement, donc je voulais l'intégrer ScrollView. Mais je ne suis pas en mesure d'y parvenir, la vue se réduit à sa taille compressée. Disons que je veux que le ScrollView défile verticalement, j'aimerais donc que le contenu corresponde à la largeur de scrollView. J'utilise donc un tel aperçu:

struct ScrollSubview_Previews : PreviewProvider {
    static var previews: some View {
        func textfield() -> some View {
            TextField(.constant("Text")).background(Color.red)
        }

        return Group {
            textfield()
            ScrollView {
                textfield()
            }
        }
    }
}

Mais cela se termine par un résultat comme celui-ci:

enter image description here

6
olejnjak

C'est un problème connu qui existe également dans la version bêta 2 - consultez les notes de publication d'Apple Xcode 11 ici ⬇️ https://developer.Apple.com/documentation/xcode_release_notes/xcode_11_beta_2_release_notes .

La solution de contournement mentionnée par Apple eux-mêmes consiste à définir un cadre fixe pour l'élément intérieur ScrollView. Dans ce cas, je suggère d'utiliser GeometryReader pour fixer la largeur de l'écran, la hauteur est automatiquement adaptée au contenu.

Par exemple, si vous devez adapter le contenu du ScrollView à la largeur de l'écran, vous pouvez quelque chose comme:

return GeometryReader { geometry in
     Group {
         self.textfield()
         ScrollView {
             self.textfield()
                 .frame(width: geometry.size.width)
         }
     }
 }
2
xxcat

Voici une astuce: introduisez un HStack qui n'a qu'un Spacer:

return Group {
        HStack {
            Spacer()
        }
        textfield()
        ScrollView {
            textfield()
        }
    }
1
ielyamani