1.collectionViewを画面一杯に配置する。CellのIdentifierに任意の名前「Cell」とつける。
2.プロトコルを追加し、デリゲートの設定をする。
class ViewController: UIViewController,UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
UICollectionViewDelegateFlowLayoutはレイアウトに関するものなので、レイアウト調整をしたい時に使う。必須ではない。
デリゲートの設定をする。
CollectionViewにマウスを合わせて、ViewControllerの黄色い丸までcontrolキーを押しながらドラックアンドドロップ。
「dataSource」と「delegate」を設定する。
コードで設定することもできる。
3.必須のメソッドを書く
以下の必須のメソッド2つを書く。
//セルの数 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 35 } //セルの情報を入れる func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { //表示するセルの登録 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) cell.backgroundColor = .blue //セルの色 return cell }
4.レイアウトの調整をする
あとは適宜レイアウトの調整。
・セクションを追加
セクションを2つにして、セクションごとにセル数を変えてみた。
//セルの数 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if section == 0 { return 7 } else { return 35 } } //セルの情報を入れる func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { //表示するセルの登録 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) cell.backgroundColor = .blue //セルの色 return cell }
・セクションやセルのレイアウトを変更
セクションのマージンを上下左右30にした。
セル同士の距離はデフォルとで10pxとなっている。1pxに変えた。
またセクションごとにセルの数を変えた。
override func viewDidLoad() { super.viewDidLoad() //レイアウトを調整 let layout = UICollectionViewFlowLayout() //セクション間の距離 layout.sectionInset = UIEdgeInsets(top: 30, left: 30, bottom: 30, right: 30) //セル同士の列の距離(最小値) layout.minimumInteritemSpacing = 1 //セル同士の行の距離(最小値) layout.minimumLineSpacing = 1 collectionView.collectionViewLayout = layout } //セルの数 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if section == 0 { return 7 } else { return 35 } }
・境界線、特定のセルの色を変える
//セルの情報を入れる func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { //表示するセルの登録 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) cell.backgroundColor = .white //セルの色 //2つ目のセルの色のみ変更 if indexPath.row == 1 { cell.backgroundColor = .systemPink } //境界線 cell.layer.borderColor = UIColor.systemPink.cgColor cell.layer.borderWidth = 1 return cell }
全てのコード
import UIKit class ViewController: UIViewController,UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { @IBOutlet weak var collectionView: UICollectionView! override func viewDidLoad() { super.viewDidLoad() //レイアウトを調整 let layout = UICollectionViewFlowLayout() //セクション間の距離 layout.sectionInset = UIEdgeInsets(top: 30, left: 30, bottom: 30, right: 30) //セル同士の列の距離(最小値) layout.minimumInteritemSpacing = 1 //セル同士の行の距離(最小値) layout.minimumLineSpacing = 1 collectionView.collectionViewLayout = layout } //セクションの数 func numberOfSections(in collectionView: UICollectionView) -> Int { return 2 } //セルの数 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if section == 0 { return 7 } else { return 35 } } //セルの情報を入れる func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { //表示するセルの登録 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) cell.backgroundColor = .white //セルの色 //2つ目のセルの色のみ変更 if indexPath.row == 1 { cell.backgroundColor = .systemPink } //境界線 cell.layer.borderColor = UIColor.systemPink.cgColor cell.layer.borderWidth = 1 return cell } //セルの大きさ・隙間を調整する関数 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let width = UIScreen.main.bounds.width / 7 - 1.5 let height = width * 1.5 return CGSize(width: width, height: height) } }
参考:https://rara-world.com/swift-collection-view-programming/