使用 Swift 3 在 UICollectionView 上自定义布局

Posted

技术标签:

【中文标题】使用 Swift 3 在 UICollectionView 上自定义布局【英文标题】:Custom Layout on UICollectionView using Swift 3 【发布时间】:2017-07-26 10:04:25 【问题描述】:

Desire Layout on CollectionView

我在 swift 3.0 中无法在 collectionview 上实现自定义布局。搜索类似的布局已经两天了,但我找不到。请任何人帮助我实现我想要的自定义布局。

【问题讨论】:

是横卷还是竖卷? 横向卷轴 您可以使用委托方法来调整集合单元格的大小。 是的,但是单元格的排列有问题 【参考方案1】:

有很多方法,并且有很多 3rd 方库可以提供帮助。但我怀疑你不知道如何在单元格之间进行布局和间距。

这是最好的帮助..只需使用值来获得类似的布局。

override func prepareLayout() 
 // 1
 if cache.isEmpty 
// 2
let columnWidth = contentWidth / CGFloat(numberOfColumns)
var xOffset = [CGFloat]()
for column in 0 ..< numberOfColumns 
  xOffset.append(CGFloat(column) * columnWidth )

var column = 0
var yOffset = [CGFloat](count: numberOfColumns, repeatedValue: 0)

// 3
for item in 0 ..< collectionView!.numberOfItemsInSection(0) 

  let indexPath = NSIndexPath(forItem: item, inSection: 0)

  // 4
  let width = columnWidth - cellPadding * 2
  let photoHeight = delegate.collectionView(collectionView!, heightForPhotoAtIndexPath: indexPath, 
      withWidth:width)
  let annotationHeight = delegate.collectionView(collectionView!,
      heightForAnnotationAtIndexPath: indexPath, withWidth: width)
  let height = cellPadding +  photoHeight + annotationHeight + cellPadding
  let frame = CGRect(x: xOffset[column], y: yOffset[column], width: columnWidth, height: height)
  let insetFrame = CGRectInset(frame, cellPadding, cellPadding)

  // 5
  let attributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath)
  attributes.frame = insetFrame
  cache.append(attributes)

  // 6
  contentHeight = max(contentHeight, CGRectGetMaxY(frame))
  yOffset[column] = yOffset[column] + height

  column = column >= (numberOfColumns - 1) ? 0 : ++column

参考UIcollectionView Layout

【讨论】:

以上是关于使用 Swift 3 在 UICollectionView 上自定义布局的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS swift 中的 ARSCNView 中显示 uicollection 视图

Swift - 如果项目滚动一点,UICollection 快速恢复

Swift 3 - iOS 11.2上的UICollectionview问题

在单独的 UICollection 类中使用未解析的标识符“UICollection”

集合视图不会重新加载(Swift)

如何在 UICollection 补充视图中使用 UIButton?