- 팀 소개 앱을 개발하면서 처음
UICollectionView를 써봤는데, 써보면서 잘 되지 않았던 레이아웃 셋팅 관련 내용를 정리합니다.
if let flowlayout = resultCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowlayout.estimatedItemSize = .zero
}
estimatedItemSize는 셀 크기를 자동으로 조정할지 여부를 결정하는 속성입니다..automatic으로 설정되어 있어, 셀 크기를 내용에 따라 동적으로 조정합니다.UICollectionViewDelegateFlowLayout을 이용해서 직접 셀 크기를 설정할 것이기 때문resultCollectionView.contentInset = UIEdgeInsets(top: 10, left: 15, bottom: 0, right: 15)
contentInset은 UICollectionView 또는 UIScrollView에서 내용과 바깥쪽 View 사이의 여백을 설정하는 속성입니다.(top: 10, left: 15, bottom: 0, right: 15)를 적용하면:💡 왜 필요한가?
resultTeamGoalView.layer.cornerRadius = 15
extension ResultViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let interItemSpacing: CGFloat = 10
let padding: CGFloat = 10
let width = (collectionView.bounds.width - interItemSpacing * 2 - padding * 2) / 3
let height = width
return CGSize(width: width, height: height)
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
####💡 왜 필요한가?
| 코드 | 역할 |
|---|---|
| flowlayout.estimatedItemSize = .zero | 셀 크기 자동 조정 기능을 비활성화하고, 고정된 크기 적용 |
| contentInset = UIEdgeInsets(top:10, left: 15, bottom: 0, right: 15) | 컬렉션 뷰 내부 여백 조정 |
| layer.cornerRadius = 15 | 특정 View의 모서리를 둥글게 만듦 |
| sizeForItemAt | 각 셀의 크기를 계산하여 설정 |
| minimumInteritemSpacingForSectionAt | 같은 행의 셀 간 최소 간격 설정 |
| minimumLineSpacingForSectionAt | 행(줄) 사이의 최소 간격 설정 |
UICollectionView에서 셀 크기와 간격을 직접 조정하려면 UICollectionViewDelegateFlowLayout을 사용해야 함estimatedItemSize = .zero로 설정cornerRadius를 활용contentInset을 사용하여 조정 가능minimumInteritemSpacingForSectionAt과 minimumLineSpacingForSectionAt을 0으로 설정