如何在UICollectionView中获取特定项的高度

时间:2017-02-11 09:32:20

标签: ios swift uicollectionview uicollectionviewcell

在我的UICollectionView中,我使用委托方法为不同的cell项设置了不同的高度:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    switch indexPath.item {
    case 0:
          return CGSize(width: view.frame.width, height: view.frame.width/2)
    case 1:
        return CGSize(width: view.frame.width, height: 250)
    case 2:
        return CGSize(width: view.frame.width, height: view.frame.width/2)
    default:
         return CGSize(width: view.frame.width, height: view.frame.width)
    }

}

现在给出indexPath,我想获得之前为特定cell项目分配的高度。

3 个答案:

答案 0 :(得分:0)

您可以从控制器中调用委托方法。

collectionView(collectionView, layout: collectionView.collectionViewLayout, sizeForItemAt: indexPath)

答案 1 :(得分:0)

使用数组存储每个cell的大小。

因此,当您想知道cell[i]的先前尺寸时,它将位于array[i-1]位置。

答案 2 :(得分:0)

如果你已经设置了UICollectionView,并且稍后想要获得任何单元格的高度,你可以使用下面的方法来获得单元格的高度

cellForItem(at:)

您可以将此方法与UICollectionView对象一起使用以获取特定索引处的单元格。 获得任何特定单元格时,可以使用该单元格内contentView的框架检查该单元格的高度

Apple Doc :UICollectionView cellForItem

如果您想在第一次调用后更新单元格大小  UICollectionView的collectionViewLayout属性的invalidateLayout方法。此方法会重新生成您的布局,在您的情况下,这也意味着调用-collectionView: layout: sizeForItemAtIndexPath:,这是反映所需项目大小的正确位置。

  

<强>的invalidateLayout
  使当前布局无效并触发布局更新。

     

您可以随时调用此方法来更新布局信息。   此方法使集合视图本身的布局无效   马上回来。因此,您可以多次调用此方法   相同的代码块,不会触发多个布局更新。该   在下一个视图布局更新周期中发生实际布局更新。

Apple Doc: Invalidate layout