티스토리 뷰
오늘은 UICollectionViewLayout에 대해서 살펴보겠습니다.
커스텀한 레이아웃을 구현할 때 사용했었던 기억이 있네요.
먼저 UICollectionViewLayout은 컬렉션 뷰의 레이아웃 정보를 생성하기 위한 추상 클래스입니다.
이는 컬렉션 뷰내에서 cell, supplementary view, decoration view의 위치를 결정하는 객체입니다.
즉 컬렉션 뷰는 제공된 레이아웃 정보를 통해 뷰를 알맞은 위치에 표시하여 스크린에 보일 수 있도록 합니다.
레이아웃 객체는 레이아웃 디자인에 기반해 컬렉션 뷰 아이템들의 position, size, visual 상태를 정의합니다.
컬렉션 뷰에는 3가지 타입의 visual elements가 존재합니다.
cell
셀은 메인 element이고 각각의 데이터 아이템을 나타냅니다.
상호작용하게 사용할 수 있으며 선택, 드래깅, 셀 재정렬을 할 수 있습니다.
셀은 하나의 그룹에 둘 수 있으며 원하면 여러 섹션을 나누어 셀을 둘 수 있습니다.
supplementary views
데이터를 나타내지만 유저의 의해 선택될 수는 없습니다.
supplementary view는 헤더와 푸터와 같은 뷰로 사용될 수 있습니다.
컬렉션 뷰의 전체 구간 또는 섹션에 적용할 수 있고 옵셔널이고 레이아웃 객체에 의해 배치가 지정됩니다.
decoration views
비주얼 장식같은 것입니다. (뱃지와 같은 것)
데이터를 포함하지 않으며 유저에게 선택될 수 없습니다.
decoration view는 supplementary view와는 타입이 다릅니다.
하지만 supplementary view와 동일하게 옵셔널이고 레이아웃 객체에 의해 배치가 지정됩니다.
즉 컬렉션 뷰는 여러번에 걸쳐서 레이아웃 객체에게 이러한 element들의 레이아웃 정보를 제공해달라고 요청합니다.
커스텀한 레이아웃을 위해 구현해야 되는 메소드는 아래와 같습니다.
layoutAttributesForElements(in:)
layoutAttributesForSupplementaryView(ofKind:at:)
(레이아웃이 supplementary views를 지원해야 할 때)
layoutAttributesForDecorationView(ofKind:at:)
(레이아웃이 decoration views를 지원해야 할 때)
shouldInvalidateLayout(forBoundsChange:)
이러한 메소드는 컬렉션 뷰가 화면에 컨텐츠를 배치할 때 필요한 기본적인 레이아웃 정보를 제공합니다.
삽입, 삭제, 이동시에 레이아웃 정보가 업데이트 되어야 한다면 아래 메서드를 추가로 구현하면 됩니다.
resource:
https://developer.apple.com/documentation/uikit/uicollectionviewlayout
'Tech > iOS' 카테고리의 다른 글
layoutIfNeeded, setNeedsLayout의 차이 (0) | 2020.09.04 |
---|---|
UICollectionView 살펴보기3 (UICollectionViewFlowLayout, UICollectionViewDelegateFlow (0) | 2020.09.01 |
UICollectionView 살펴보기1 (0) | 2020.08.25 |
Equatable 프로토콜 (0) | 2020.05.03 |
커스텀 로딩 뷰 만들기 (2) | 2020.04.26 |
- Total
- Today
- Yesterday
- objective-c
- 알고리즘
- 책 추천
- Animation
- 책
- RX
- Deep learning
- 딥러닝
- ReactiveX
- iOS SwiftUI
- 문자열
- 독서
- leetcode
- swiftUI
- stanford SwiftUI
- Algorithm
- 책 후기
- rxswift
- Xcode
- 머신러닝
- wwdc
- string
- ARC
- ios
- SWIFT
- 애니메이션
- objc
- 스위프트
- 스위프트UI
- swift5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |