반응형
- UICollectionViewDelegateFlowLayout에서 sizeForItemAt에 정의
extension QuoteViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let margin = 16 + 16
let quote = viewModel?.updates[indexPath.row]
return QuoteListCollectionViewCell.fittingSize(availableWidth: UIScreen.main.bounds.width - CGFloat(margin), quote: quote)
}
}
- UICollectionViewCell에 fittingSize 정의
- 이때 UIColletionViewCell의 contentView에 들어가 subView들은 AutoConstraint로 정의 되어야 함
static func fittingSize(availableWidth: CGFloat, quote: Quote?) -> CGSize {
guard let quote = quote else { return .zero }
let cell = QuoteListCollectionViewCell()
cell.configuration(dataSource: quote)
let targetSize = CGSize(width: availableWidth, height: UIView.layoutFittingCompressedSize.height)
return cell.contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel)
}
- width는 고정된 값을 가지고 height는 데이터 값에 따라 높이가 변경되어야 하므로 targetSize에 UIView.layoutFittingCompresssedSize.height로 설정
- width는 고정이므로 리턴에서 withHorizontalFittingPriority는 required로, verticalFittingPriority는 fittingSizeLevel로 정의
728x90
반응형
'🍎 iOS' 카테고리의 다른 글
[iOS/Swift] Unit Test 란? (0) | 2023.04.10 |
---|---|
[RxSwift] passing viewmodel data to viewController (0) | 2023.03.25 |
[iOS/Xcode] Pod file not found 이슈 (0) | 2023.03.23 |
[Swift] FSCalendar 커스텀 캘린더 정리 (0) | 2023.03.16 |
[Swift] 고차 함수 CompactMap (2) | 2023.03.09 |
댓글