[TIL] 컬렉션뷰

Eden·2025년 6월 19일

개요

UICollectionView는 iOS에서 그리드 또는 커스텀 레이아웃의 리스트 UI를 만들 때 사용하는 강력한 컴포넌트입니다. UITableView보다 유연하며, 가로/세로 스크롤, 셀 크기 조절, 다양한 레이아웃 구성에 적합합니다.


핵심 개념

✅ UICollectionView

  • 데이터를 셀 단위로 보여주는 뷰
  • UICollectionViewLayout을 기반으로 다양한 형태의 UI 구성 가능

✅ UICollectionViewCell

  • 하나의 아이템을 표시하는 셀
  • 커스텀 UI 구성 가능 (예: 이미지 + 텍스트)

✅ DataSource & Delegate

  • 데이터 공급과 사용자 상호작용을 처리하는 필수 프로토콜
  • DataSource: 셀 개수, 셀 생성 등
  • Delegate: 셀 선택, 크기, 레이아웃 설정 등

기본 사용 방법 ✏️

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하여 다양한 형태 구현 가능
UICollectionViewCompositionalLayoutiOS 13+에서 사용, 유연하고 선언적인 레이아웃 구성

커스터마이징 팁 ✨

  • 셀에 이미지, 텍스트, 아이콘 등 자유롭게 배치 가능
  • UICollectionViewDelegateFlowLayout을 통해 셀 간격, 크기, 여백 조정
  • 헤더/푸터 설정 가능
  • iOS 14+에서 UICollectionViewDiffableDataSource 활용 시 데이터 관리가 더욱 편리함

주의할 점 ⚠️

  • 셀 재사용 시 이전 상태 초기화 (prepareForReuse 활용)
  • 레이아웃/데이터 충돌 방지를 위한 reloadData 사용 주의
  • 셀 크기 계산을 layout에서 명확히 정의하지 않으면 UI 오류 발생 가능

결론

UICollectionView는 동적인 레이아웃, 이미지 갤러리, 복잡한 UI를 구현할 때 매우 유용한 컴포넌트입니다. 기본 구조와 데이터 흐름을 명확히 이해하면 다양한 화면에 적용할 수 있으며, 커스터마이징을 통해 앱의 UI 완성도를 크게 높일 수 있습니다.

profile
iOS Dev

0개의 댓글