问题描述
背景:我正在将项目从UIKit转换为SwiftUI。当前使用UIKit,我在UICollectionView中有一个UICollectionView,两者都启用了Paging。这使用户可以在单元格上向上/向下和向左/向右滑动。每个单元格都充满整个屏幕(类似于TikTok的主UI),每个单元格都有大量数据要从Firebase中提取,因此我不想在出现第一个视图时加载所有项目,而是因为每个单元格都会出现(这是通过UICollectionView委托在UIKit下实现的当前实现。
问题::我找不到在SwiftUI中启用此“分页”(基于用户滑动)的方法。很难想象苹果没有分页功能就创建了这个新框架吗?如果他们未包括在内,是否有解决方法?否则,有没有一种简单的方法可以将UICollectionView包含到SwiftUIView中?
任何帮助或解决方法都不错!谢谢:)
解决方法
SwiftUI 2
您可能需要LazyGrid
。
以下是垂直网格的示例代码:
struct ContentView: View {
let data = (1...1000).map { "Item \($0)" }
let columns = [
GridItem(.adaptive(minimum: 80))
]
var body: some View {
ScrollView {
LazyVGrid(columns: columns,spacing: 20) {
ForEach(data,id: \.self) { item in
Text(item)
}
}
.padding(.horizontal)
}
}
}
您可以在以下链接中找到更多信息:
- SwiftUI Lazy Grid Tutorial
- Impossible Grids with SwiftUI
- How to position views in a grid using LazyVGrid and LazyHGrid
SwiftUI 1
如果您绑定的iOS 13或LazyGrid
与您的期望不符,您仍然可以将UICollectionView
包装在UIViewRepresentable
中。
有关更多说明,请参见此链接:Implementing UICollectionView / UICollectionView DiffableDataSource in SwiftUI