UICollectionView는 iOS에서 그리드 또는 커스텀 레이아웃의 리스트 UI를 만들 때 사용하는 강력한 컴포넌트입니다. UITableView보다 유연하며, 가로/세로 스크롤, 셀 크기 조절, 다양한 레이아웃 구성에 적합합니다.
class MyViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
let items = ["🍎", "🍊", "🍇", "🍓"]
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.minimumInteritemSpacing = 10
layout.minimumLineSpacing = 10
layout.itemSize = CGSize(width: 100, height: 100)
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.dataSource = self
cv.delegate = self
cv.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
return cv
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(collectionView)
collectionView.frame = view.bounds
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
cell.backgroundColor = .systemBlue
return cell
}
}
| 레이아웃 종류 | 설명 |
|---|---|
UICollectionViewFlowLayout | 기본 세로/가로 그리드 형태 |
| 커스텀 레이아웃 | 직접 subclassing하여 다양한 형태 구현 가능 |
UICollectionViewCompositionalLayout | iOS 13+에서 사용, 유연하고 선언적인 레이아웃 구성 |
UICollectionViewDelegateFlowLayout을 통해 셀 간격, 크기, 여백 조정UICollectionViewDiffableDataSource 활용 시 데이터 관리가 더욱 편리함prepareForReuse 활용)reloadData 사용 주의UICollectionView는 동적인 레이아웃, 이미지 갤러리, 복잡한 UI를 구현할 때 매우 유용한 컴포넌트입니다. 기본 구조와 데이터 흐름을 명확히 이해하면 다양한 화면에 적용할 수 있으며, 커스터마이징을 통해 앱의 UI 완성도를 크게 높일 수 있습니다.