[英]Reorder cells in UICollectionView + NSFetchedResultsController
[英]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.