ScrollView scrollt in Kombination mit Geometry Reader nicht richtig (springt)

Nov 11 2020

Ich habe die Antwort hier bereits überprüft ( ScrollView scrollt nicht mit Geometry Reader als Kind ), was meiner Meinung nach ziemlich ähnlich ist, aber ich konnte es nicht herausfinden.

Mein Ziel ist es, die Bilder gleich groß (quadratisch) zu zeigen.

Hier ist meine Ansicht:


struct MyGeoView: View {
    
    let icons = ["bed.double.fill","tram.fill","tv.music.note.fill","hare.fill", "person", "clock", "plus", "trash", "home", "arrow", "pencil", "scribble", "folder", "folder.circle", "trash.circle", "paperplane"]
    
    var body: some View {
        
        GeometryReader{ geo in
            ScrollView{
                GeometryReader{ geo in
                    LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: 3 ){
                        ForEach(icons, id: \.self){ post in
                            Image(systemName: post)
                                .frame(width: geo.size.width/3, height: geo.size.width/3)
                                .background(Color.pink)
                                .foregroundColor(.white)
                        }
                    }
                }
            }
        }
    }
    
}

Leider scrollt es nicht richtig (springt) und geht immer wieder nach oben. Hast du ein paar ideen

Vielen Dank!

Antworten

Asperi Nov 11 2020 at 21:00

Sie brauchen nur eine GeometryReaderexterne.

Hier ist Code korrigiert. Getestet mit Xcode 12.1 / iOS 14.1

var body: some View {
    GeometryReader{ geo in
        ScrollView{
            LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 3), spacing: 3 ){
                ForEach(icons, id: \.self){ post in
                    Image(systemName: post)
                        .frame(width: geo.size.width/3, height: geo.size.width/3)
                        .background(Color.pink)
                        .foregroundColor(.white)
                }
            }
        }
    }
}