SimpleCollectionView
Context
Implementing Modern Collection Views
Bring compositional layouts to your app and simplify updating your user interface with diffable data sources.
Preview
Sample Code
UICollectionViewCell
import UIKit
class NumberCell: UICollectionViewCell {
static let reuseIdentifier = String(describing: NumberCell.self)
@IBOutlet weak var label: UILabel!
}
UICollectionViewDiffableDataSource
enum Section {
case main
}
@IBOutlet weak var collectionView: UICollectionView!
var dataSource: UICollectionViewDiffableDataSource<Section, Int>!
override func viewDidLoad() {
super.viewDidLoad()
configureDataSource()
}
func configureDataSource() {
dataSource = UICollectionViewDiffableDataSource<Section, Int>(collectionView: self.collectionView, cellProvider: { (collectionView, indexPath, number) -> UICollectionViewCell? in
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: NumberCell.reuseIdentifier, for: indexPath) as? NumberCell else {
fatalError("Cannot create new cell")
}
cell.label.text = number.description
return cell
})
var initialSnapshot = NSDiffableDataSourceSnapshot<Section, Int>()
initialSnapshot.appendSections([.main])
initialSnapshot.appendItems(Array(1...100))
dataSource.apply(initialSnapshot, animatingDifferences: false)
}
Layouts
Arrange your collection view content in a highly configurable layout
NSCollectionLayoutGroup(set heightDimension as absolute)
override func viewDidLoad() {
super.viewDidLoad()
collectionView.collectionViewLayout = configureLayout()
}
func configureLayout() -> UICollectionViewCompositionalLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = NSDirectionalEdgeInsets(top: 5.0, leading: 5.0, bottom: 5.0, trailing: 5.0)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(44.0))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let selction = NSCollectionLayoutSection(group: group)
return UICollectionViewCompositionalLayout(section: selction)
}
NSCollectionLayoutItem(set fractionalWidth as 0.2)
func configureLayout() -> UICollectionViewCompositionalLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.2), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = NSDirectionalEdgeInsets(top: 5.0, leading: 5.0, bottom: 5.0, trailing: 5.0)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(44.0))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let selction = NSCollectionLayoutSection(group: group)
return UICollectionViewCompositionalLayout(section: selction)
}