1.重写layout 自动计算cell 宽高 继承UICollectionViewFlowLayout
// 主要计算cell 宽高的方法
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
super.layoutAttributesForElements(in: rect)
let array: Array = super.layoutAttributesForElements(in: rect) ?? NSArray.init() as! [UICollectionViewLayoutAttributes]
for idx in 1 ..< array.count {
let attribute: UICollectionViewLayoutAttributes = array[idx]
let attribute2: UICollectionViewLayoutAttributes = array[idx - 1]
if (attribute.indexPath.section == attribute2.indexPath.section) && attribute.frame.origin.x != 0 {
let maximumSpacing: Int = 10
let orgin: CGFloat = attribute2.frame.maxX
let leftX = orgin + CGFloat(maximumSpacing) + attribute.frame.size.width
let rightX = self.collectionView!.frame.size.width - 10
if leftX <= rightX {
var frame: CGRect = attribute.frame
frame.origin.x = orgin + CGFloat(maximumSpacing)
attribute.frame = frame
} else {
var frame: CGRect = attribute.frame
frame.origin.x = CGFloat(maximumSpacing)
frame.origin.y = attribute2.frame.maxY + CGFloat(maximumSpacing)
attribute.frame = frame
}
}
}
return array
}
override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}
使用sizeForItemAt 给出cell 的宽高的时候 不生效的原因是 没有引用**
**
示例:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
即可使用sizeForItemAt 找不到这个方法 点协议进去可查