나는 이렇게 생긴 컬렉션 뷰를 만들고싶다.
세로 길이는 일정하고, 가로 길이는 컨텐츠의 길이에 따라 정해져있는
텍스트라벨로만 이루어진 스크롤뷰
컬렉션 뷰 셀의 크기는 extension의 sizeForItemAt 에서 지정 가능하다.
extension HomeVC: UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 70, height: 35)
}
}
...
컬렉션 뷰가 만들어질 때
이 순서로 진행되기 떄문에
셀 크기를 할당하는 시점에서는 해당 셀에 어떤 내용이 들어갈지 모른다 -> 따라서 크기를 미리 지정하는것이 불가능하다
그렇다고 크기를 하나로 지정하면 이꼴난다
그래서 고민을 많이 했는데..
해결책이 의외로 간단했다
말그대로 임시로 라벨을 만드는거다.
임시로 컨텐츠가 들어간 라벨을 만들기
-> 그 라벨사이즈로 셀 크기 부여하기
기가막히다
extension HomeVC: UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let tmpLabel : UILabel = UILabel()
tmpLabel.text = tagList[indexPath.item]
return CGSize(width: nt(tmpLabel.intrinsicContentSize.width), height: 35)
}
}
임시로 만든 tmpLabel에 컨텐츠를 넣은 후 그 라벨의 가로길이를 셀의 가로길이로 반환하게 했다
라벨의 가로길이를 반환하는법은 아래 링크를 참고했다
(사랑해요 스택오버플로우 당신없이는 못살아)