목차
- Compositional Layout 이란?
- Compositional Layout 사용
1. Compositional Layout 이란?
Compositional Layout은 iOS 13+ 에서 사용할 수 있는 컬렉션 뷰 레이아웃의 일종입니다. 각각의 작은 구성 요소를 전체 레이아웃으로 결합(또는 구성)하여 콘텐츠에 대한 모든 종류의 시각적 배열을 구축할 수 있습니다.
쉽게 말하면 Compositional Layout은 배열 형태의 복잡한 UI를 그릴 때 사용하면 도움이 되는 기술입니다.
이미지와 같이 Section, Group, Item의 작은 구성 요소로 나누어 여러 개의 컬렉션뷰로 만들어야 할 UI를 1개로 만들 수 있습니다.
개인적인 의견이지만 section, group, item을 메서드 한 곳에서 관리하니까 편하네요. 동적 크기 셀 만들기 간단하고 코드도 적고요. ㅎ_ㅎ
꼭 위의 이미지 같은 화면 구성이 아니더라도 앞으로 컬렉션뷰를 써야할 일이 있을 때 자주 사용할 것 같습니다. 너무 좋아.. 👍
2. Compositional Layout 사용
복잡한 화면말고 간단한 화면으로 감을 잡아보겠습니다.
일단 기본적으로 컬렉션뷰를 만들었을 때랑 Compositional Layout을 적용했을 때 결론 스크린샷부터 보여드리겠습니다.
(link -> github 코드)
override func viewDidLoad() {
super.viewDidLoad()
collectionView.register(CollectionViewCell.self, forCellWithReuseIdentifier: "CollectionViewCell")
collectionView.dataSource = self
// 기본적인 컬렉션 뷰에 이것만 추가로 적어주었음
collectionView.collectionViewLayout = createBasicListLayout()
}
func createBasicListLayout() -> UICollectionViewLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .estimated(80), heightDimension: .absolute(48.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(48.0))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}
NSCollectionLayoutDimension - link
- .absolute : 지정한 치수로 정확하게 설정됨
- .estimated : 기대하는 치수를 적고 최종적인 치수는 컨텐츠가 렌더링 된 후 설정됨
- .fractionalWidth : 컨테이너 크기에 비례하여 설정됨 (1.0 이면 컨테이너 크기와 같다는 뜻)
Compositional Layout 적용된 이미지 보면 너무 간격이 딱 붙어있죠,,
간격을 설정 해보겠습니다.
func createBasicListLayout() -> UICollectionViewLayout {
let itemSize = NSCollectionLayoutSize(widthDimension: .estimated(80), heightDimension: .absolute(48.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(48.0))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
// 아이템 간격 설정
group.interItemSpacing = .fixed(10)
let section = NSCollectionLayoutSection(group: group)
// 그룹 간격 설정
section.interGroupSpacing = 10
// 섹션 인셋 설정
section.contentInsets = NSDirectionalEdgeInsets(top: 4, leading: 4, bottom: 2, trailing: 2)
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}
간단하네요!
끝!!
참고
반응형
'IOS Swift' 카테고리의 다른 글
[iOS+2] CALayer 알아보기 (shadow, gradient, animation) (0) | 2023.05.07 |
---|---|
[iOS+8] Swift JSON null 디코딩 처리 방법 (0) | 2023.04.23 |
Apple 멤버쉽이 만료되면 발생되는 일(feat. iOS) (0) | 2023.01.25 |
Firebase Distribution(feat. iOS) (2) | 2023.01.20 |
iOS App 강제 업데이트 기능 (0) | 2023.01.10 |