【问题标题】:UICollectionView reorder cells if not fit width如果不适合宽度,UICollectionView 重新排序单元格
【发布时间】:2018-06-25 22:20:46
【问题描述】:

我想知道如果我的 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

【问题讨论】:

  • 集合视图的布局由您在集合视图上设置的UICollectionViewLayout 实现定义。您必须向我们展示您对 UICollectionViewLayout 的实现(例如,展示您是使用 UICollectionViewFlowLayout 还是您自己的自定义实现)
  • @MilanNosáľ 完成!

标签: ios iphone uicollectionview uicollectionviewlayout


【解决方案1】:

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

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

感谢这个答案here

【讨论】:

    【解决方案2】:

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

    我猜你想要一个左对齐的流。但是,据我所知UICollectionViewFlowLayout 不支持。要实现你想要的,要么使用一些 3rd 方库(例如,UICollectionViewLeftAlignedLayout),要么查看答案here 并实现你自己的布局。

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多