1 : Cell 타입 정의해주기
import UIKit
class TweetCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .red
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Swift
복사
Note : 사실 UIView 를 상속받아 새로운 생성자를 사용한다는 것은 사용자(개발자)가 뷰를 생성하는 방법을 직접 하겠다 라는 의미로 봐도 무방하다.
2 : UICollectionViewController 상속받기
If you create the collection view controller programmatically, it automatically creates a new unconfigured collection view object, which you can access using the collectionView
property.
컬렉션 뷰 컨트롤러 를 코드로 만들면 자동으로 collection view 객체가 생성된다. collectionView 프로퍼티로 접근이 가능하다.
If a data source or delegate is not specified, the collection view controller assigns itself to the unspecified role.
또한 자동으로 collectionView 의 delegate 와 datasource 에 상속받은 뷰컨트롤러를 할당한다.
//UICollectionViewController 사용
class FeedController: UICollectionViewController {
// MARK: - lifeCycles
override func viewDidLoad() {
super.viewDidLoad()
//컬렉션 뷰에 사용할 Cell 의 타입을 등록해주기
collectionView.register(TweetCell.self, forCellWithReuseIdentifier: "TweetCell")
}
}
Swift
복사
3 : 컬렉션 뷰 레이아웃을 사용한 컨트롤러 인스턴스 생성
let feed = FeedController(collectionViewLayout: UICollectionViewFlowLayout())
let nav1 = templateNavigationController(image: UIImage(named: "home_unselected"), rootViewController: feed)
Swift
복사
4 : 컬렉션 뷰 커스텀
데이터 연결
•
numberOfItemsInSection : 섹션 별 아이템 개수
•
cellForItemAt : 보여질 셀 생성 및 데이터 연결
extension FeedController {
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
return cell
}
}
Swift
복사
아이템 사이즈 조절 : UICollectionViewDelegateFlowLayout
•
sizeForItemAt : 각 아이템의 사이즈 조절
•
minimumInteritemSpacingForSectionAt : 아이템 열간 간격
// MARK: - UICollectionViewDelegateFlowLayout
extension ProfileFilterView: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: self.frame.width / 3, height: self.frame.height)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
}
Swift
복사
5 : 기타 커스텀
status bar 무시하기
collectionView.contentInsetAdjustmentBehavior = .never
Swift
복사