Swift专题

Swift基础~UICollectionView

2018-04-10  本文已影响171人  记忆的北极

这里是Swift简单的UICollectionView的创建和使用,
其中的CollectionViewCell是自定义的cell,
ZLLCollectionReusableView是自定义的标题头,
ZLLFootCollectionReusableView是自定义的脚部.

import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {
    
    //全局变量
    var screen_width:CGFloat!
    var screen_height:CGFloat!
    
    
    var collectionView:UICollectionView!
    
    //MARK: -
    //MARK: init
    override func viewDidLoad() {
        super.viewDidLoad()
        screen_height = UIScreen.main.bounds.size.height
        screen_width = UIScreen.main.bounds.size.width
        
        self.setCollectionView()
    }

    //MARK: -
    //MARK: UI
    func setCollectionView() {
        //1, 流布局
        let layout = UICollectionViewFlowLayout.init()
        
        //2, 设置每个item的大小
        layout.itemSize = CGSize(width: screen_width/2, height: screen_height/3)
        
        //3, 垂直和水平滑动
        //        UICollectionViewScrollDirection.vertical  省略写法  .vertial
        //        UICollectionViewScrollDirection.horizontal  省略写法  .horizontal
        layout.scrollDirection = .vertical
        
        //4, 每个item之间的最小距离 inter 之间
        layout.minimumInteritemSpacing = 10
        
        //5, 每行之间的最小距离
        layout.minimumLineSpacing = 10
        
        //6, 定义collectionView
        collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: screen_width, height: screen_height), collectionViewLayout: layout)
        
        //7, 注册collectionViewCell
        collectionView.register(UINib (nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CollectionViewCell")
        
        //8, 注册header
        collectionView.register(UINib (nibName: "ZLLCollectionReusableView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "ZLLCollectionReusableView")
        //设置页头尺寸
        layout.headerReferenceSize = CGSize.init(width: screen_width, height: 50)

        //9, 注册底部
        collectionView.register(UINib (nibName: "ZLLFootCollectionReusableView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "ZLLFootCollectionReusableView")
        //设置底部尺寸
        layout.footerReferenceSize = CGSize(width: screen_width, height: 50)
        
        //10, 设置delegate
        collectionView!.delegate = self
        collectionView!.dataSource = self
        
        //11, 分页显示效果
        collectionView.isPagingEnabled = true
        
         collectionView.backgroundColor = UIColor.white
        
        self.view.addSubview(collectionView)
    }
    
    
    //MARK: -
    //MARK: collection datasource
    
    func numberOfSections(in collectionView: UICollectionView) -> Int
    {
        return 1
    }
    
    //必选方法
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return 8
    }
    
    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
    {
       
        
        if (kind as String) == UICollectionElementKindSectionHeader  {
            //返回头部
            let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "ZLLCollectionReusableView", for: indexPath)
            
            return header
        }else
        {
            //返回底部
            let footer = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionFooter, withReuseIdentifier: "ZLLFootCollectionReusableView", for: indexPath)
            return footer
        }
    }
    
    //必选方法
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as!CollectionViewCell
        
        cell.iconImageView.image = UIImage(named:"textImage")
        cell.backgroundColor = UIColor.red
        return cell
    }
    
    //MARK: -
    //MARK: delegateFlowlayout
    
    //返回header的大小
//    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize
//    {
//        return CGSize(width: screen_width, height: 50)
//    }

    
    //可以定制不同的item  return: item的大小
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
        if (indexPath as IndexPath).row % 2 == 1 {
            return CGSize(width: (screen_width - 20)/2, height: screen_height/2)
        }else{
            return CGSize(width: (screen_width - 20)/2, height: screen_height/3)
        }
    }

    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

自定义的cell是继承UICollectionViewCell

import UIKit

class CollectionViewCell: UICollectionViewCell {
    
    //图片属性
    @IBOutlet weak var iconImageView: UIImageView!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

cell的头部和脚部都的自定义都是继承 UICollectionReusableView, 这和oc里是一样的
这里使用的是.xib文件, 脚和头一样,所以就只展示一下头的代码就行,其实也没什么内容,所有展示都在.xib上,我这里没有添加属性.

import UIKit

class ZLLCollectionReusableView: UICollectionReusableView {

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    
}
上一篇下一篇

猜你喜欢

热点阅读