YunDaeHyeon
← Lab

UICollectionViewCompositionalLayout

스터디2025.08.06
  • UIKit
  • Swift

UICollectionViewCompositionalLayout에 대해

UICollectionViewCompositionalLayout | Apple Developer Documentation

  • UICollectionViewCompositionalLayout은 iOS 13+ 에서 사용 가능하다.
  • UICollectionViewCompositionalLayout 은 iOS에서 UICollectionView를 위한 엄청 유연한 객체!

주요 특징

  • Layout은 Item, Group, Section의 계층 구조로 구성된다.

출처 : https://developer.apple.com/documentation/uikit/uicollectionviewcompositionallayout

  • Item은 컬렉션뷰의 가장 작은 단위인 Cell을 뜻한다.
  • Group은 여러 Item을 묶은 단위. Group에서 수평, 수직 등의 지정 방향으로 배치할 수 있다.
  • Section은 여러 Group을 묶은 단위이며 헤더 혹은 푸터와 같은 SubView를 가질 수 있다.
  • CompositionalLayout은 섹션 별로 서로 다른 레이아웃 구성이 가능하다.

→ 하나의 UICollectionView 내에서 다양하고 복잡한 레이아웃을 동시에 구현할 수 있다!

  • 크기 지정은 고정(absolute), 추정(estimated), 비율(fractional) 방식이 모두 가능하다.

→ 특히 화면 크기에 비례하는 비율 지정이 매우 편리!

⭐ CompositionalLayout 은 하나의 CollectionView에 섹션별로 다른 Layout을 구성하기가 쉬운 장점이 있다.


크기 지정 - NSCollectionLayoutDimension

NSCollectionLayoutDimension | Apple Developer Documentation

위에서 설명한 것과 같이 CompositionalLayout 은 고정(absolute), 추정(estimated), 비율(fractional) 방식을 통해 크기 지정을 할 수 있다.

  • 고정(.absolute) - 고정 크기를 갖는다.

    let absoluteSize = NSCollectionLayoutSize(
      widthDimension: .absolute(32),
      heightDimension: .absolute(32)
    )
    
  • 추정(.estimated) - 런타임 때 변경된다.

    let estimatedSize = NSCollectionLayoutSize(
      widthDimension: .estimated(120),
      heightDimension: .estimated(120)
    )
    
  • 비율(.fractional) - 비율

    let fractionalSize = NSCollectionLayoutSize(
      widthDimension: .fractionalWidth(0.2),
      heightDimension: .fractionalHeight(0.2)
    )