APDynamicGrid
is a SwiftUI package that helps you create consistent and animatable grids. The DynamicGrid
View preserves the same width, adjusting the last elements consistently.
Define your model adopting the Hashable
and Identifiable
protocols
struct Entry : Identifiable, Hashable {
let id = UUID()
// ...
}
and wrap it with the @State
decorator
var body : some View {
private @State var entries : [Entry]
// number of columns is a @State var too
private @State var columns : Int
ScrollView {
DynamicGrid(columns: $columns, data: $entries) { entry in
MyCustomCell(entry: entry)
}
}
}
Entries can be animated registering a @Namespace
using their unique id
var body : some View {
private @State var entries : [Entry]
private @State var columns : Int
// 1. add a namespace
private @Namespace var namespace
ScrollView {
DynamicGrid(columns: $columns, data: $entries) { entry in
MyCustomCell(entry: entry)
// 2. register the namespace
.matchedGeometryEffect(id: entry.id, in: namespace)
}
// 3. apply animations
.animation(.default)
}
}
You have to select File
-> Swift Packages
-> Add Package Dependency
and enter the repository url https://github.com/antoniopantaleo/APDynamicGrid.git
You have to add the package as a dependency in your Package.swift
file
let package = Package(
//...
dependencies: [
.package(url: "https://github.com/antoniopantaleo/APDynamicGrid.git", upToNextMajor(from: "1.0.0")),
],
//...
)