- [UIKit] Compositional Layout Section2024년 08월 07일 14시 59분 55초에 업로드 된 글입니다.작성자: 이중엽
Compositional Layout

compositional layout은 UICollectionView 레이아웃의 한 종류로
차례로 item을 구성하고, group을 구성하고, section을 차례로 구성이 가능하다
[ 공식 페이지 제공 코드 ]
func createBasicListLayout() -> UICollectionViewLayout { let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0)) let item = NSCollectionLayoutItem(layoutSize: itemSize) let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(44)) let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) let section = NSCollectionLayoutSection(group: group) let layout = UICollectionViewCompositionalLayout(section: section) return layout }3가지의 사이즈 지정 방법을 제공한다
- fractional - 컨테이너와의 너비&높이 비율로 지정
- absolute - 고정 값 지정
- estimated - content의 크기가 바뀔 수 있음을 내포, 임시(예측) 값
그 외 다양한 기능들이 있는데, 이건 공식 문서를 참고하자!
샘플 프로젝트도 다운받을 수 있다
Implementing Modern Collection Views | Apple Developer Documentation
Bring compositional layouts to your app and simplify updating your user interface with diffable data sources.
developer.apple.com
[ 프로젝트 적용 예시 ]
import UIKit enum ExampleCompositionalLayout: Int, CaseIterable { case typeFirst case typeSecond static func create() -> UICollectionViewCompositionalLayout { let layout = UICollectionViewCompositionalLayout { section, environment in let section = ExampleCompositionalLayout(rawValue: section) switch section { case .typeFirst: return createTypeFirst() case .typeSecond: return createTypeSecond() case nil: return nil } } return layout } private static func createTypeFisrt() -> NSCollectionLayoutSection { ... } private static func createTypeSecond() -> NSCollectionLayoutSection { ... } }개인적으로는 Layout의 Section을 Enum으로 생성하여 관리하고 있다
Compositional Layout 활용하기
Enum을 통해 관리하게 되면, 연관값을 활용해서 동일한 Section Layout을 무한정 추가 가능하다
나 같은 경우에는 날짜별로 동일한 Layout의 Section이 추가되어야 하기 때문에, enum case에 String타입의 연관값을 추가했다
그래서 동일한 Section Layout을 날짜(String)만 바꿔서 계속 추가할 수 있었다
enum TripDashboardCompositionalLayout: CaseIterable, Hashable { case expense(section: String) ... } snapshot.appendItems([data], toSection: .expense(section: newSectionName))GitHub - DONOTINTO/DoT: DoT - 여행 가계부 (Last Update v1.1.1 - 24.05.07)
DoT - 여행 가계부 (Last Update v1.1.1 - 24.05.07). Contribute to DONOTINTO/DoT development by creating an account on GitHub.
github.com
전체 코드는 여기서 확인 가능하다
'UIKit' 카테고리의 다른 글
[UIKit] Bounds와 Frame의 차이 (0) 2025.02.08 [UIKit] LayoutSubivews (0) 2024.08.08 [UIKit] View Life Cycle (0) 2023.06.11 다음글이 없습니다.이전글이 없습니다.댓글