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 |