[ swift - compositional layout ]

Yr Yr·2024년 2월 22일

TIL

목록 보기
38/39

Compositional Layout

  • iOS 13부터 도입된 UICollectionView의 레이아웃 시스템이며 복잡한 UI를 더 쉽게 구현할 수 있도록 하는 도구이다. UICollectionViewCompositionalLayout 클래스를 사용하여 구현.

구성요소

  • NSCollectionLayoutItem : 컬렉션뷰에서 각 아이템의 크기, 모양을 정한다.
  • NScollectionLayoutGroup : 여러 아이템을 그룹화하여 배치할 수 있는 방법을 정한다. 그리드 레이아웃을 만들거나 아이템을 그룹으로 묶어 배치할 때 사용된다.
  • NSCollectionLayoutSection : 한 섹션의 레이아웃을 정한다. 여러 그룹이나 아이템을 포함할 수 있고 섹션 간의 여백이나 헤더,푸터를 설정할 수 있다.
  • NSCollectionLayoutSize : 아이템, 그룹, 섹션의 크기를 정의
    * widthDimension / heightDimension : 가로 / 세로 크기. fractional-, absolute, estimated 등의 값으로 설정할 수 있다.
    • fractionalWidth / fractionalHeight : 상위그룹 또는 섹션의 너비에 대한 상대적인 비율을 나타낸다.
    • absolute : 정확한 픽셀 크기를 나타낸다.
    • estimated : 대략적인 크기를 나타낸다. 성능 최적화를 위해 사용되며 정확한 크기를 정의하지 않고 추정값을 사용할 수 있다.
  • UICollectionViewCompositionalLayout : 위 구성요소들을 사용해 전체 컬렉션뷰 레이아웃을 생성한다. 이를 통해 다양한 레이아웃을 조합할 수 있다.
func createCompositionalLayout() -> UICollectionViewLayout {
	// Item
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.2), heightDimension: .fractionalHeight(1.0))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)
    
    // Group
    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(0.2))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitem: item, count: 5) // 아이템 5개를 가로로 나열
    
    // Section
    let section = NSCollectionLayoutSection(group: group)
    
    // Compositional Layout 
    let layout = UICollectionViewCompositionalLayout(section: section)
    return layout
}

0개의 댓글