如果宽度不合适,UICollectionView会重新排序单元格

时间:2018-01-17 05:41:29

标签: ios iphone uicollectionview uicollectionviewlayout

我想知道为什么我的UICollectionView重新排序单元格,如果不适合CollectionView的宽度。

添加长" XXXXX .." "超级"细胞移到右边。

p.s经过一些阅读后,我发现问题可能出在" minimumInteritemSpacing"根据其文件。

...after the number of items is determined, the actual spacing may possibly be adjusted upward.

这就是我设置布局的方式

// 2 - setup flowlayout
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.minimumLineSpacing = self.tagSpacing
    layout.minimumInteritemSpacing = self.tagSpacing
    layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
    layout.scrollDirection = .vertical

2 个答案:

答案 0 :(得分:0)

答案是定义我自己的布局。

import UIKit

class CustomViewFlowLayout:UICollectionViewFlowLayout {

let cellSpacing:CGFloat = 0

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
    if let attributes = super.layoutAttributesForElements(in: rect) {
        for (index, attribute) in attributes.enumerated() {
            if index == 0 { continue }
            let prevLayoutAttributes = attributes[index - 1]
            let origin = prevLayoutAttributes.frame.maxX
            if(origin + cellSpacing + attribute.frame.size.width < self.collectionViewContentSize.width) {
                attribute.frame.origin.x = origin + cellSpacing
            }
        }
        return attributes
    }
    return nil
}
}

感谢您的回答here

答案 1 :(得分:0)

UICollectionViewFlowLayout支持可变大小的单元格,但它将单元格对齐为#34;对齐&#34;。在你的情况下,当你添加一个不适合第一行的新单元格时,布局会证明第一行(使其跨越整行) - 所以基本上它将第一个单元格放在左边,第二个单元格放在第一行对。然后继续下一行。这是对最新情况的解释。

我想你想要一个左对齐的流程。但是,据我所知UICollectionViewFlowLayout不支持这一点。要实现您的目标,请使用某些第三方库(例如UICollectionViewLeftAlignedLayout),或者查看答案here并实施您自己的布局。