
class ALZTypeFlowLayout: UICollectionViewFlowLayout {
private var contentWidth: CGFloat = 0
private var page: Int = 0
private var attributesArray = [UICollectionViewLayoutAttributes]()
override func prepare() {
super.prepare()
minimumInteritemSpacing = 6
minimumInteritemSpacing = 8
scrollDirection = .horizontal
itemSize = CGSize(width: (SCREEN_WIDTH - 15 - 12) / 3.0, height: 60)
sectionInset = UIEdgeInsets(top: 0, left: 7, bottom: 0, right: -8)
guard let count = collectionView?.numberOfItems(inSection: 0) else { return }
let leftMargin = sectionInset.left
attributesArray.removeAll()
for i in 0..<count {
if let attributes = layoutAttributesForItem(at: IndexPath(item: i, section: 0)) {
let index = attributes.indexPath.item
let row = index % 3
let colum = (index / 3) % 2
let page = index / 6
self.page = page
attributes.frame.origin.x = leftMargin + CGFloat(row) * (itemSize.width + minimumInteritemSpacing) + CGFloat(page) * SCREEN_WIDTH
attributes.frame.origin.y = CGFloat(colum) * (itemSize.height + minimumLineSpacing)
attributes.frame.size = itemSize
attributesArray.append(attributes)
}
}
contentWidth = CGFloat(self.page + 1) * SCREEN_WIDTH
}
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
return attributesArray
}
override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}
override var collectionViewContentSize: CGSize {
return CGSize(width: contentWidth, height: 128)
}
}