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 |
Tags
- 노드JS
- JS
- SwiftUI
- Python3
- 파이썬
- 파이썬웹크롤링
- 파이썬중급강의
- nodeJS
- rxswift
- 우리를위한프로그래밍
- 프로그래머스
- 리프2기
- 인프런파이썬강의
- 스위프트
- 인프런
- IOS
- 토플공부수기
- 유학토플
- uikit
- 인프런강의
- 인프런파이썬
- 자바스크립트
- swift
- 인프런오리지널
- IOS프로그래밍
- 웹크롤링
- 교환학생토플
- 파이썬중급
- 카카오톡채팅봇
- 토플
Archives
- Today
- Total
먹고 기도하고 코딩하라
UICollectionViewFlowLayout 설정으로 같은 줄의 셀 높이를 동일하게 맞추기 본문
728x90
728x90
UICollectionViewFlowLayout에는 prepare() 메소드와 layoutAttributesForElement(in rect: CGRect) → [UICollectionViewLayoutAttributes]? 라는 메소드가 있어 이것을 오버라이드할 수 있다.
- prepare : 현재 레이아웃을 업데이트하도록 레이아웃 객체에게 지시
- 레이아웃 업데이트는 콜렉션뷰가 처음 콘텐츠를 보여줄 때와 뷰 변경으로 인해 레이아웃이 명시/암시적으로 유효성을 잃을 때 발생
- 매 레이아웃 업데이트 동안 콜렉션뷰는 prepare()을 먼저 호출해 레이아웃 객체에게 다음 레이아웃 수행을 위한 준비를 하도록 함
- layoutAttributesForElement : 특정 직사각형 영역 내의 모든 셀과 뷰의 레이아웃 attributes를 가져온다.
실제로 레이아웃 배치를 하는 코드가 길긴 하지만 일부 발췌해서 올린다.
셀을 하단으로 배치시키는 방법은 여러 가지가 있겠으나, 여기서 내가 사용한 트릭은 한 줄의 셀 중 가장 높은 셀로 높이를 통일시키고, 실제 이미지뷰 높이가 적은 경우에는 top constriant를 0보다 크도록 잡아서 그만큼 위로부터 띄우는 것이다.
// 가로의 아이템들(=같은 높이에 있는)의 높이를 가장 높은 것으로 맞춰준다.
if rect.count > 2, let lastRect = array.last?.frame {
let sameLineRects = array.filter { $0.frame.origin.y == lastRect.origin.y }
let maxHeight = sameLineRects.map { $0.size.height }.max() ?? 0
sameLineRects.forEach { rect in
array.frame.size.height = maxHeight
}
}
간단한 아이디어로, 같은 높이에 있는(frame.origin.y가 같은 것으로 판단) 셀들을 모아서 그 중 가장 높은 높이로 frame height를 재조정하면 된다.
728x90
반응형
'앱 > Swift' 카테고리의 다른 글
MacOS 15 업데이트 및 Xcode 16 업데이트 호환성 대응 (7) | 2024.09.24 |
---|---|
StoreKit2으로 결제 모듈 마이그레이션하기 (1) | 2024.09.03 |
Swift Concurrency 속 Continuation의 쓰임 (feat. 컴플리션 핸들러 → async-await) (1) | 2024.07.22 |
Constructing an object of class type with a metatype value must use a ‘required’ initializer 해결하기 (0) | 2024.07.06 |
[iOS] 실무에 Privacy manifest를 적용하자 (0) | 2024.03.28 |
Comments