微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LazyVGrid单元格子视图对于单元格内的特定文本不断消失

如何解决LazyVGrid单元格子视图对于单元格内的特定文本不断消失

场景

我正在尝试创建一个三列的LazyVGrid,以通过LazyVGrid显示带有图标和文本的项目。

代码

struct CategoryPickerCellPresentationModel: Identifiable {
    let id = UUID()
    let name: String
    let image: Image
    let color: Color
}

extension CategoryPickerCellPresentationModel: Equatable {
    static func == (lhs: CategoryPickerCellPresentationModel,rhs: CategoryPickerCellPresentationModel) -> Bool {
        return lhs.name == rhs.name
    }
}

struct CategoriesListView: View {
    let categorySelectionDatasource: [CategoryPickerCellPresentationModel]
    let gridItemLayout: [GridItem] = Array(repeating: .init(.flexible()),count: 3)
    
    var body: some View {
        ScrollView {
            Spacer(minLength: 20)
            LazyVGrid(columns: gridItemLayout,spacing: 40) {
                ForEach((0..<categorySelectionDatasource.count)) {
                    let category = categorySelectionDatasource[$0]
                    vstack {
                        category.image
                            .font(.system(size: 30))
                            .frame(width: 50,height: 50)
                            .foregroundColor(category.color)
                        Text(category.name)
                            .multilineTextAlignment(.center)
                    }
                }
            }
        }
    }
}

struct CategoriesListView_Previews: PreviewProvider {
    static var previews: some View {
        let dumyCategory = [CategoryPickerCellPresentationModel(name: "Household",image: Image(systemName: "house.fill"),color: .green),CategoryPickerCellPresentationModel(name: "Finance",image: Image(systemName: "banknote.fill"),CategoryPickerCellPresentationModel(name: "Education",image: Image(systemName: "book.fill"),color: .purple),CategoryPickerCellPresentationModel(name: "Health",image: Image(systemName: "cross.case.fill"),color: .red)]
        CategoriesListView(categorySelectionDatasource: dumyCategory+dumyCategory.reversed()+dumyCategory)
    }
}

问题

每当文本为Health时,我都会尝试滚动网格,文本会消失。除了Health之外,我还尝试了其他几种文本,对他们来说效果很好。

enter image description here

这可能是什么原因?

解决方法

这是frame的问题,请删除此行.frame(width: 50,height: 50),它可以正常工作。字母Health没问题,但是当text宽度小于50时,也会产生相同的问题。

修改

如果在ForEach循环中添加id,则可以使用。无需移除框架。

ForEach((0..<categorySelectionDatasource.count),id:\.self)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。