繁体   English   中英

SwiftUI:多个 LazyVGrid 奇怪的滚动

[英]SwiftUI: Multiple LazyVGrid weird scrolling

我在使用下面的代码时遇到问题,我无法解释。 上下滚动时,它似乎工作得很好。 当您尝试旋转它时,它似乎会卡住并且无法使用旧的重复使用的单元格(在屏幕上留下大间隙,只能通过向上滚动来修复)

还有其他人遇到过这种行为吗?

struct Item: Identifiable {
    let id: UUID = UUID()
    let title: String
    let description: String
    let teaser: String
}

struct BasicCell: View {

    let item: Item

    var body: some View {
        VStack(alignment: .leading, spacing: 0) {
            Color(.gray)
                .cornerRadius(4)
                .aspectRatio(CGSize(width: 361, height: 217), contentMode: .fit)
            Text(item.title)
                .padding(.top, 12)
                .foregroundColor(.red)
            Text(item.description)
                .padding(.top, 8)
            Text(item.teaser)
                .fixedSize(horizontal: false, vertical: true)
                .padding(.top, 10)
            Spacer()
        }
    }
}

struct ThreeGridLarge: View {

    let header: String
    let items: [Item]

    var columns: [GridItem] {
        [
            GridItem(.adaptive(minimum: 217), spacing: 24, alignment: .leading),
            GridItem(.adaptive(minimum: 217), spacing: 24, alignment: .leading),
            GridItem(.adaptive(minimum: 217), spacing: 24, alignment: .leading)
        ]
    }

    var body: some View {
        LazyVGrid(columns: columns, alignment: .leading, spacing: 16) {
            ForEach(items, id: \.id) { item in
                BasicCell(item: item)
            }
        }
    }
}

struct GridView: View {
    var body: some View {
        ScrollView {
            Group {
                ThreeGridLarge(header: "", items: [
                    Item(title: "GEMEENTERAADSVERKIEZINGEN", description: "Diefstal, bedreiging, geruïneerde zakenpartners: de twee gezichten van ondernemer Willem Blijdorp", teaser: "Willem Blijdorp is een mediaschuwe, maar gevierde ondernemer die geroemd wordt om zijn successen. Geruïneerde ex-zakenpartners vertellen een ander verhaal. „Ik voel me zakelijk vermoord door Blijdorp.”"),
                    Item(title: "MEDIA", description: "Rechter verbiedt uitzending EenVandaag", teaser: "De zitting vond achter gesloten deuren plaats. Zowel de orde van advocaten als EenVandaag mogen geen mededelingen doen over de inhoud van de zaak."),
                    Item(title: "ZWARE MISHANDELING", description: "Lil Kleine opnieuw vast na beroep OM tegen vrijlating", teaser: "Rapper Lil Kleine wordt verdacht van zware mishandeling. Hij kwam twee weken geleden vrij. Het OM zag voldoende „ernstige bezwaren” om hem langer vast te houden en in dat oordeel ging de rechtbank vandaag mee."),
                ])
                .padding(.top, 45)
                ThreeGridLarge(header: "", items: [
                    Item(title: "GEMEENTERAADSVERKIEZINGEN", description: "Diefstal, bedreiging, geruïneerde zakenpartners: de twee gezichten van ondernemer Willem Blijdorp", teaser: "Willem Blijdorp is een mediaschuwe, maar gevierde ondernemer die geroemd wordt om zijn successen. Geruïneerde ex-zakenpartners vertellen een ander verhaal. „Ik voel me zakelijk vermoord door Blijdorp.”"),
                    Item(title: "MEDIA", description: "Rechter verbiedt uitzending EenVandaag", teaser: "De zitting vond achter gesloten deuren plaats. Zowel de orde van advocaten als EenVandaag mogen geen mededelingen doen over de inhoud van de zaak."),
                    Item(title: "ZWARE MISHANDELING", description: "Lil Kleine opnieuw vast na beroep OM tegen vrijlating", teaser: "Rapper Lil Kleine wordt verdacht van zware mishandeling. Hij kwam twee weken geleden vrij. Het OM zag voldoende „ernstige bezwaren” om hem langer vast te houden en in dat oordeel ging de rechtbank vandaag mee."),
                ])
                .padding(.top, 45)
            }
            .padding(.horizontal, 24)
        }
    }
}

找不到允许我使用ScrollView交换到List的解决方案,并应用了很多修复程序以使其看起来像一个普通的滚动视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM