[Swift]SnapKit + Then CollectionView Cell Size
Swift 초보의 구현이니, 가볍게 참고만 해주세요 😅

기존 구현 👨🏻‍💻

  • 기존 Collection View의 Cell Size를 정의할 땐 UICollectionViewDelegateFlowLayout 프로토콜을 채택해 아래와 같이 구현을 했었다.
func collectionView(_ collectionView: UICollectionView, 
                    layout collectionViewLayout: UICollectionViewLayout, 
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
	return CGSize(width: 100, height: 100)
}

이게 무슨 문제가 될까?

  • 위처럼 구현은 할 수 있으나 extension을 통해 프로토콜을 채택하고, 구현하기에 코드가 길어질 수밖에 없고, Collection View의 관련된 부분을 몰아서 보기가 힘든 부분이 있다.

 

나의 구현 👨🏻‍💻

우선 코드부터 보면 아래와 같다.

private lazy var layout = UICollectionViewFlowLayout().then {
    let widthSize = UIScreen.main.bounds.width * 0.78
    let heightSize = UIScreen.main.bounds.height * 0.78
    $0.itemSize = CGSize(width: widthSize, height: heightSize)   // 이 부분
}

private lazy var collectionView = UICollectionView(
    frame: .zero,
    collectionViewLayout: layout
).then {
    // etc...
}
  • UICollectionViewFlowLayout() 객체를 만들어 해당 객체의 itemSize로 접근을 하여 사이즈를 지정해주었다.
  • layout 객체를 밖으로 안 빼고 아래처럼도 구현할 수 있다.
private lazy var collectionView = UICollectionView(
    frame: .zero,
    collectionViewLayout: UICollectionViewFlowLayout()
).then {
    let layout = UICollectionViewFlowLayout()
    let width = UIScreen.main.bounds.width * 0.78
    let height = UIScreen.main.bounds.height * 0.78
    collectionViewFlowLayout.itemSize = CGSize(width: width, height: height)
    $0.collectionViewLayout = layout
    
    // etc...
}
  • 그 밖에도 다른 구현방법이 있을 수 있으나 현재는 SnapKit과 Then을 통해 굳이 UICollectionViewDelegateFlowLayout을 채택하지 않아도 되는 부분이 되게 좋았던 것 같다.

 

정말 간단한 방법일 수 있으나 이번 일을 통해 개발자는 꾸준히 공부해야 된다는 게 이런 부분인 것 같다. 
더 열심히 공부해서 직관적이고 효율적인 코드를 구현하는 개발자가 되기를...😂

'iOS_Swift.zip' 카테고리의 다른 글

[RxSwift]Relay 버튼 활성화  (0) 2022.09.24
[RxSwift]UITextField 정규식  (0) 2022.09.10
[Swift]Status Bar 색상 변겅  (0) 2022.04.21
[iOS]Strong과 weak 참조 방식  (0) 2022.02.27
[iOS]Protocol  (0) 2022.02.20