//
// 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)
网友评论