繁体   English   中英

UICollectionView对单元格进行重新排序(如果宽度不合适)

[英]UICollectionView reorder cells if not fit width

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

添加长的“ XXXXX ..”后,“超级”单元格移到右侧。

ps经过一番阅读后,我发现根据其文档,该问题可能在“ 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

答案是定义自己的布局。

import UIKit

类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
}
}

由于这个答案在这里

UICollectionViewFlowLayout支持可变大小的单元格,但是将单元格对齐为“合理”。 在您的情况下,当您添加一个不适合第一行的新单元格时,布局会证明第一行是合理的(使其跨整个行)-因此,基本上,它会将第一个单元格放在左侧,将第二个单元格放在左侧对。 然后继续下一行。 那就是发生了什么的解释。

我想您想要左对齐的流程。 但是,据我所知, UICollectionViewFlowLayout不支持该功能。 要实现您想要的目标,请使用一些第三方库(例如UICollectionViewLeftAlignedLayout ),或者在此处遍历答案并实现自己的布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM