//섹션 타입에 대한 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()
}
}
}
코드처럼 클로저를 전달해 현제 뷰의 섹션넘버와 , 환경?(잘모름) 을통해 각각 섹션이 어떻게 레이아웃을 그릴지 설정하게됨.
UICollectoinVIewCompositionLayout을 만들기 위해서는 →NScollectionLayoutSection이 필요하다
NSCollectionLayoutSection을 만들기 위해서는 → NSCollectionGroup이 필요하고,
NSCollectionGroup을 만들기 위해서는→ NSCollectionLayoutItem이 필요함
위와 같이 아이템>그룹>섹션>레아웃이 포함관계로 화면을 그려주기 때문이다.
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() 이 받아서 처리
absoulte
고정 적으로 절대값 크기 지정
estimated
런타임에 크기가 변할 가능성이 있는경우, 시스템이 예상 크기를 기반으로 실제 크기를 계산해 그린다함
fractional
자신의 부모뷰에서 얼마만큼의 비율을 차지할 것인가