如何解决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
之外,我还尝试了其他几种文本,对他们来说效果很好。
这可能是什么原因?
解决方法
这是frame
的问题,请删除此行.frame(width: 50,height: 50)
,它可以正常工作。字母Health
没问题,但是当text
宽度小于50时,也会产生相同的问题。
修改
如果在ForEach循环中添加id
,则可以使用。无需移除框架。
ForEach((0..<categorySelectionDatasource.count),id:\.self)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。