UICollectionView主要有以下几个难点
1. UICollectionViewDelegateFlowLayout
使用系统的layout
let collectionLayout = UICollectionViewFlowLayout.init()
let rect = CGRect(x: 0, y: 0, width: screenW, height: screenH)
let collectionView = UICollectionView(frame: rect, collectionViewLayout: collectionLayout)
2. 方法的运用
必须实现方法
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 15
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView .dequeueReusableCell(withReuseIdentifier: "UICollectionViewCell", for: indexPath)
cell.backgroundColor = kColor(red: 53, green: 49, blue: 59)
cell.layer.cornerRadius = 5;
cell.layer.masksToBounds = true
return cell
}
header和footer 设置
// MARK: - 设定header和footer的方法,根据kind不同进行不同的判断即可
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if kind == UICollectionView.elementKindSectionHeader{
let headerV = collectionView .dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "headerIdentifier", for: indexPath)
headerV.backgroundColor = armColor()
return headerV
}else if kind == UICollectionView.elementKindSectionFooter{
let footerV = collectionView .dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: "footIdentifier", for: indexPath)
footerV.backgroundColor = armColor()
return footerV
}
return UICollectionReusableView.init()
}
// MARK: - headerView 高
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize (width: screenW, height: 100)
}
// MARK: - footerView 高
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
return CGSize (width: screenW, height: 100)
}
item Size
// MARK: - item Size
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let itemW = (screenW-50)/3
return CGSize(width: itemW, height: itemW)
}
边框距离
// MARK: - 边框距离
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
行最小间距
// MARK: - 行最小间距
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 15
}
列最小间距
// MARK: - 列最小间距
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 5
}
item点击事件
// MARK: - item 点击
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// let cell = collectionView .cellForItem(at: indexPath)
// cell?.backgroundColor = armColor();
}
item 高亮处理
// MARK: - 是否高亮
func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool{
return true
}
// MARK: - 高亮颜色
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath){
let cell = collectionView .cellForItem(at: indexPath)
cell?.backgroundColor = armColor()
}
// MARK: - 取消长按颜色
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath){
let cell = collectionView .cellForItem(at: indexPath)
cell?.backgroundColor = kColor(red: 53, green: 49, blue: 59)
}
func armColor()->UIColor{
let red = CGFloat(arc4random()%256)/255.0
let green = CGFloat(arc4random()%256)/255.0
let blue = CGFloat(arc4random()%256)/255.0
print("red:\(red),green:\(green),blue:\(blue)")
return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
}