Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 리펙터링
- 리팩토링
- rxswift
- collectionview
- 클린 코드
- combine
- uiscrollview
- MVVM
- ribs
- Observable
- map
- uitableview
- Human interface guide
- swiftUI
- Refactoring
- UITextView
- tableView
- Clean Code
- SWIFT
- Protocol
- Xcode
- UICollectionView
- 리펙토링
- 스위프트
- 애니메이션
- ios
- swift documentation
- clean architecture
- RxCocoa
- HIG
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 5. UICollectionViewCompositionalLayout - 응용 (유튜브 뮤직 앱 레이아웃 구현) 본문
iOS 응용 (swift)
[iOS - swift] 5. UICollectionViewCompositionalLayout - 응용 (유튜브 뮤직 앱 레이아웃 구현)
jake-kim 2022. 4. 24. 01:301. UICollectionViewCompositionalLayout - 개념 (section, group, item)
2. UICollectionViewCompositionalLayout - 개념 SupplementaryView, Header, Footer)
3. UICollectionViewCompositionalLayout - 개념 (DecorationView, Badge)
5. UICollectionViewCompositionalLayout - 응용 (유튜브 뮤직 앱 레이아웃 구현)
가장 중요한 개념
- Section과 Item은 일반적으로 아는 개념이지만, Group은 CompositionalLayout에서 새로 생겨난 개념
- Group은 Item들이 한 단위로 묶어서 보여질 레이아웃을 의미
- 즉, Group의 갯수는 Item의 갯수에 따라 달라지는 특성이 존재
주요 Section
- 공통 사항
- Header는 HeaderView를 하나 만들어넣고 공통으로 사용
- Section은 2가지 형태로 사용
- 첫 번째 Section)
- header부분: stackView 2개 사용하여 썸네일이 없는 헤더와 제목이 하나만 있는 Mode를 구분하여 구현
- group부분: item이 2개 보이고 3개는 오른쪽에 걸쳐서, 수평 스크롤을 암시해주는 UI
- 스크롤을 명시해야하므로, 첫 번째 그룹 오른쪽에 두 번째 그룹이 보여야하므로, group의 width를 1.0으로 주지 않고 0.9와 같은 값으로 지정
<레이아웃 코드>
private func getLayoutConceptSection() -> NSCollectionLayoutSection {
// item
let itemSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(0.5),
heightDimension: .fractionalHeight(1.0)
)
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = NSDirectionalEdgeInsets(top: 12, leading: 8, bottom: 12, trailing: 8)
// group
let groupSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(0.9),
heightDimension: .fractionalHeight(0.3)
)
let group = NSCollectionLayoutGroup.horizontal(
layoutSize: groupSize,
subitems: [item]
)
// section
let section = NSCollectionLayoutSection(group: group)
section.orthogonalScrollingBehavior = .continuous
section.boundarySupplementaryItems = [header, footer]
return section
}
- 두 번째 Section)
- header부분: 위에서 만든 HeaderView 사용
- group부분: 수직으로 아이템이 4개 존재하고, 오른쪽에 나머지 스크롤할 수 있는 영역이 보이도록 구현
- item이 4개가 존재하므로, NSCollectionLayoutGroup.vertical()로 주고, count값을 4로 주어서 한 그룹 당 4개의 아이템을 표출되도록 구현
<레이아웃 코드>
private func getLayoutMusicSection() -> NSCollectionLayoutSection {
// item
let itemSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(1.0),
heightDimension: .fractionalHeight(1.0)
)
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.contentInsets = NSDirectionalEdgeInsets(top: 12, leading: 8, bottom: 12, trailing: 8)
let groupSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(0.9),
heightDimension: .fractionalHeight(1.0/4.0)
)
// group
let group = NSCollectionLayoutGroup.vertical(
layoutSize: groupSize,
subitem: item,
count: 4
)
// section
let section = NSCollectionLayoutSection(group: group)
section.orthogonalScrollingBehavior = .continuous
return section
}
* 전체 코드 (편의를 위해 SnapKit과 Then프레임워크 사용): https://github.com/JK0369/ExYoutubeMusic
'iOS 응용 (swift)' 카테고리의 다른 글
Comments