/ / / / / / TestRandomUICollectionViewLayout swift WCJ_SWIFT_STUDY / / / / Created by cheng-jie wang on 2020/3/6. / / Copyright © 2020 wangcj. All rights reserved. //

import UIKit class TestRandomUICollectionViewLayout: UICollectionViewLayout { let SCREEN_W = UIScreen.main.bounds.size.width let SCREEN_H = UIScreen.main.bounds.size.height var contentH: CGFloat = 0 let numberColumns = 2 let lineSpace: CGFloat = 10 var attributeStore = [UICollectionViewLayoutAttributes ]() override func prepare() { super.prepare() if Attributestore. isEmpty {let columW = (screen_w-3.0 * lineSpace)/CGFloat(numberColumns) var xOffset = [CGFloat]() for colum in 0 .. < numberColumns { xOffset.append(CGFloat(colum) * columW + lineSpace * CGFloat(colum) + lineSpace ) } var colum: Int = 0 var yOffset = [CGFloat](repeating: 0, count: numberColumns) for item in 0 .. < collectionView! .numberOfItems(inSection: 0) { let indexPath = NSIndexPath(item: item, section: 0) let randomNumber: Int = Int(arc4random() % 100) + 70 let height = CGFloat(randomNumber) let frame = CGRect(x: xOffset[colum], y: yOffset[colum], width: columW, height: height) let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath as IndexPath) attributes.frame = frame attributeStore.append(attributes) contentH = max(contentH, frame.maxY) yOffset[colum] = yOffset[colum] + height + lineSpace colum = colum >= (numberColumns - 1) ? 0: 1 } } } override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? { return attributeStore[indexPath.row] } override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { return attributeStore } override var collectionViewContentSize: CGSize{ return CGSize(width: SCREEN_W, height: contentH) } }Copy the code