美文网首页
UICollectionView 瀑布流demo

UICollectionView 瀑布流demo

作者: gale_小米 | 来源:发表于2021-12-23 09:13 被阅读0次
//
//  MyLayout.swift
//  UITestDemo2
//
//  Created by DAHAO CHEN on 2021/12/13.
//

import Foundation
import UIKit

class MyLayout : UICollectionViewFlowLayout {
    
    var itemCount : Int?
    var attributeArr : Array<UICollectionViewLayoutAttributes>?
    
    override func prepare() {
        super.prepare()
        //获取宽度
        let width = (UIScreen.main.bounds.size.width - self.minimumInteritemSpacing) / 2
        attributeArr = Array()
        var l = 0
        var r = 0
        for i in 0...itemCount! {
            
            let indexPath = NSIndexPath(row: i, section: 0)
            let att = UICollectionViewLayoutAttributes(forCellWith: indexPath as IndexPath)
            let height = ((arc4random() % 150) + 50)
            
            var tem = 0
            
            var H = 0
            
            if l <= r {
                H =  Int(l) + Int(self.minimumLineSpacing)
                l +=  Int(height) + Int(self.minimumLineSpacing)
                tem = 0
            }else {
                H =  Int(r) + Int(self.minimumLineSpacing)
                r += Int(height) + Int(self.minimumLineSpacing)
                tem = 1
            }
            att.frame = CGRect(x: (CGFloat(tem) * ( width + self.minimumInteritemSpacing)),
                               y: CGFloat(H),
                               width: CGFloat(width), height: CGFloat(height))
            attributeArr?.append(att)
        }
        var height:CGFloat = 0
        if l <= r {
            height = CGFloat((r * 2 / itemCount!) ) - self.minimumLineSpacing
        }else{
            height = CGFloat((l * 2 / itemCount!) ) - self.minimumLineSpacing
        }
        self.itemSize = CGSize(width: CGFloat(width), height: CGFloat(height) )
    }
    
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        return attributeArr
    }
}

引用方式

let myLayout = MyLayout()
        myLayout.itemCount = 100
        let col = UICollectionView(frame: self.view.frame, collectionViewLayout: myLayout)
        col.register(NSClassFromString("UICollectionViewCell"), forCellWithReuseIdentifier: "cellId")
        col.dataSource = self
        col.delegate = self
        self.view.addSubview(col)

相关文章

网友评论

      本文标题:UICollectionView 瀑布流demo

      本文链接:https://www.haomeiwen.com/subject/qenjfrtx.html