1.重写layout 自动计算cell 宽高 继承UICollectionViewFlowLayoutweb
// 主要计算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 的宽高的时候 不生效的缘由是 没有引用**ide
**
示例:svg
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
便可使用sizeForItemAt 找不到这个方法 点协议进去可查code