2017-04-20 106 views
-1

我知道如何在UICollectionView中显示Collection单元格。但我想使用自定义布局来显示单元格。如何在Ios中为UICollectionView设置自定义布局

我的收藏应该有两列,其中单元格的宽度是固定的,但单元格的高度可能因标签的内容大小而异。

但我不知道该怎么做。 我想要显示的细胞采集如图所示图片下方

Layout Example

我想实现它迅速。

+0

究竟这是什么长教程是关于https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest –

回答

0

使用此功能,您可以根据需要更改单元格的高度和宽度。

FUNC的CollectionView(_的CollectionView:UICollectionView,布局collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:IndexPath) - > CGSize {}

使用indexPath接入小区

0
  1. 自定义UICollectionViewLayout类
  2. 为你的视图控制器定义一个协议来计算每个单元的高度
  3. 使你的视图控制器成为代理
  4. 在委托方法中,您需要计算出每个单元格的动态高度。
  5. 覆盖准备函数,该函数将为每个单元格的高度调用委托方法,并为布局子类中的每个单元格生成自定义UICollectionViewLayoutAttributes实例。
  6. 您可能还需要将这些UICollectionViewLayoutAttributes实例存储在数组中以获得更好的性能,以避免重新计算。 (此步骤仅在禁用UICollectionView预取时有用。)
  7. 重写layoutAttributesForElements函数以返回给定矩形内所有项目的布局属性。
  8. 在您的自定义UICollectionViewCell中应用这些UICollectionViewLayoutAttributes实例以执行一些自动布局。
  9. 覆盖UICollectionViewLayoutAttributes子类中的copy和isEqual函数。 UICollectionViewLayoutAttributes的子类需要符合NSCopying协议,因为属性的对象可以在内部复制。您必须实现isEqual来比较您的子类的自定义属性,例如标签的高度。
+0

谢谢,根据我对你做了提,它看起来像什么,我期待,但现在的问题是,当我要去删除特定的单元格(删除特定的数组元素和重新加载collectionView),然后应用程序获取crashed.it显示错误,如'UICollectionView收到的索引路径不存在的单元格的布局属性: {length = 2,path = 0 - 4}' –

+0

我一直使用这种方式来编写我的应用程序。删除任何单元格后,该应用程序不会崩溃。也许你可以禁用使用属性缓存阵列进行测试。 – benoitcn

相关问题