//섹션 타입에 대한 UICollectionViewLayout todjtd
    private func layout() -> UICollectionViewLayout{
        return UICollectionViewCompositionalLayout { [weak self] sectionNumber, envirionment -> NSCollectionLayoutSection? in
            guard let self = self else {return nil}
            switch self.contents[sectionNumber].sectionType{
            case.basic:
                return self.createBasicTypeSection()
            case.large:
                return self.createLargeTypeSection()
            case .rank:
                return self.createRankTypeSection()
            case .main:
                return self.createMainTypeSection()
            }
        }
    }

코드처럼 클로저를 전달해 현제 뷰의 섹션넘버와 , 환경?(잘모름) 을통해 각각 섹션이 어떻게 레이아웃을 그릴지 설정하게됨.

1. UICompositionLayout

UICollectoinVIewCompositionLayout을 만들기 위해서는 →NScollectionLayoutSection이 필요하다

NSCollectionLayoutSection을 만들기 위해서는 → NSCollectionGroup이 필요하고,

NSCollectionGroup을 만들기 위해서는→ NSCollectionLayoutItem이 필요함

위와 같이 아이템>그룹>섹션>레아웃이 포함관계로 화면을 그려주기 때문이다.

2. 각요소의 크기 지정 방식

NSCollectionLayoutDimension

collectionview의 아이템의 크기를 결정하기 위해서 사용됨

코드예시

//큰화면 레이아웃 설정
    private func createLargeTypeSection()->NSCollectionLayoutSection{
        //item
        let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.3), heightDimension: .fractionalHeight(0.7))
        let item = NSCollectionLayoutItem(layoutSize: itemSize)
        item.contentInsets = .init(top: 10, leading: 5, bottom: 0, trailing: 5)
        //group
        let gSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.9), heightDimension: .estimated(400))
        let group = NSCollectionLayoutGroup.horizontal(layoutSize: gSize, subitem: item, count: 2)

        //section
        let section = NSCollectionLayoutSection(group: group)
        section.orthogonalScrollingBehavior = .continuous
        
        let sectionHeader = self.createSectionHeader()
        section.boundarySupplementaryItems = [sectionHeader]
        section.contentInsets = .init(top: 0, leading: 5, bottom: 0, trailing: 5)
        return section
        
    }

보이는 것처럼 아이템>그룹>섹션을 차례차례 만들어서 리턴하게 됨.

마지막에 UICompositionViewLayout() 이 받아서 처리

  1. absoulte

    고정 적으로 절대값 크기 지정

  2. estimated

    런타임에 크기가 변할 가능성이 있는경우, 시스템이 예상 크기를 기반으로 실제 크기를 계산해 그린다함

  3. fractional

    자신의 부모뷰에서 얼마만큼의 비율을 차지할 것인가