티스토리 뷰

오늘은 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들의 레이아웃 정보를 제공해달라고 요청합니다. 

 

커스텀한 레이아웃을 위해 구현해야 되는 메소드는 아래와 같습니다.

collectionViewContentSize

layoutAttributesForElements(in:)

layoutAttributesForItem(at:)

layoutAttributesForSupplementaryView(ofKind:at:)

(레이아웃이 supplementary views를 지원해야 할 때)

layoutAttributesForDecorationView(ofKind:at:)

(레이아웃이 decoration views를 지원해야 할 때)

shouldInvalidateLayout(forBoundsChange:)

이러한 메소드는 컬렉션 뷰가 화면에 컨텐츠를 배치할 때 필요한 기본적인 레이아웃 정보를 제공합니다.

 

삽입, 삭제, 이동시에 레이아웃 정보가 업데이트 되어야 한다면 아래 메서드를 추가로 구현하면 됩니다. 

 

resource: 

https://developer.apple.com/documentation/uikit/uicollectionviewlayout

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함