It's better to use UICollectionView with UIViewControllerRepresentable
NavigatableCollection is an UI library for showing collection view which is missed in SwiftUI.
NavigatableCollection provides simple and navigatable collection view for SwiftUI project.
You can try sample app by opening Xcode Project under NavigatableCollectionSampleApp directory and Run.
- Xcode 11+
- iOS 13+
You can add NavigatableCollection to your project via Swift Package Manager.
Please click Xcode menu File -> Swift Packages -> Add Package Dependency... , and enter https://github.com/kagemiku/NavigatableCollection
You can show navigatable collection view if you put both NavigatableCollectionView and NavigatableCellWrapper inside of NavigationView as follows:
struct MainView: View {
// Prepares DataSource type and actual data
struct User: Identifiable {
let id: Int
}
private let dataSoruce: [User] = (0..<50).map { User(id: $0) }
// Creates a config for layout
private let config = NavigatableCollectionViewConfig(
columns: 3,
hSpacing: 5.0,
rowInsets: .init(top: 0, leading: 5, bottom: 5, trailing: 5)
)
var body: some View {
NavigationView {
// Puts `NavigatableCollectionView` inside of `NavigationView`
NavigatableCollectionView(dataSource: dataSoruce, config: config) { user in
// Wrapps cell content with `NavigatableCellWrapper` to enable navigation
NavigatableCellWrapper(destination: DetailView(id: user.id)) {
CellView(id: user.id) // Anything is OK if it is `View`
}
}
.navigationBarTitle("Sample App")
}
}
}Of course, you can also show simple non-navigatable collection view as follows:
var body: some View {
// Puts `NavigatableCollectionView`
NavigatableCollectionView(dataSource: dataSoruce, config: config) { user in
CellView(id: user.id) // Anything is OK if it is `View`
}
}Some layout items are costomizable via NavigatableCollectionViewConfig.
| Property | Description |
|---|---|
columns |
The number of columns for rows |
hSpacing |
The horizontal space between cells |
rowInsets |
The EdgeInsets for rows |
MIT License
