Sometimes you just need some boilerplate code. And usually you need to look it up. So in order to save some time, I put together this code for a simple UICollectionView with nicely spaced cells:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | class ViewController: UIViewController, UICollectionViewDataSource /*, UICollectionViewDelegate */ { let kReuseIdentifier = "CollectionCellID" let kNumCellsPerRow:CGFloat = 3.0 let kSpacer:CGFloat = 10.0 var collectionView : UICollectionView! override func viewDidLoad() { super.viewDidLoad() let cellsPerRow: CGFloat = kNumCellsPerRow let minItemSpacing: CGFloat = kSpacer let containerWidth: CGFloat = self.view.bounds.width let itemWidth: CGFloat = (containerWidth - (cellsPerRow+1) * minItemSpacing) / cellsPerRow - 1 // -1 in case the screen width doesn't make it easy for us let inset = max(minItemSpacing, floor( (containerWidth - (cellsPerRow*itemWidth) - (cellsPerRow-1)*minItemSpacing) / 2 ) ) let layout = UICollectionViewFlowLayout() layout.itemSize = CGSize(width: itemWidth, height: itemWidth) layout.minimumInteritemSpacing = minItemSpacing layout.minimumLineSpacing = minItemSpacing layout.sectionInset = UIEdgeInsets(top: minItemSpacing, left: inset, bottom: minItemSpacing, right: inset) self.collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: layout) collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: kReuseIdentifier) //collectionView.delegate = self collectionView.dataSource = self collectionView.backgroundColor = self.view.backgroundColor self.view.addSubview(collectionView) } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 20 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kReuseIdentifier, for: indexPath as IndexPath) cell.backgroundColor = UIColor.lightGray cell.layer.cornerRadius = 3.0 return cell } } |
Here is the UICollectionView gist for it.