2017-02-11 48 views
0

在我UICollectionView我使用委托方法设置不同cell项目不同的高度:我怎样才能获得一个特定项目的高度,我UICollectionView

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项目的高度。

+0

你想要得到的尺寸或设置大小?有问题,你问'得到'的大小在最后你写'设置'的大小 – HardikDG

+0

@AdiHardik谢谢..你想要得到的大小 –

+0

更新与这两种情况下,可能会有所帮助 – HardikDG

回答

0

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

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

我想获得高度我以前分配了一个特定的细胞项目 –

0

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

所以,当你想知道cell[i]的以前的大小,那么它将在位置array[i-1]

+0

想法。不错.. –

+0

是啊!使其成为全球。根据您的要求。 –

+0

通常我需要为情况1设置动态大小。其中我是那个硬编码的250 –

0

如果您已经安装了UICollectionView,并在以后的时间,你想要得到的任何单元格的高度,您可以使用以下方法来获取单元格的高度

cellForItem(at:) 

您可以使用此方法与您UICollectionView对象获取特定索引处的单元格。 当你得到任何特定的细胞,可以使用细胞内contentView的框架检查电池的高度

Apple Doc :UICollectionView cellForItem


如果希望在您设置您可以第一时间更新单元尺寸请致电 invalidateLayout您的UICollectionView的collectionViewLayout属性的方法。此方法重新生成您的布局,在您的情况下也意味着调用-collectionView: layout: sizeForItemAtIndexPath:,这是反映您所需项目大小的正确位置。

的invalidateLayout
失效当前布局并触发布局更新。

您可以随时调用此方法更新布局信息。 此方法使收集视图本身的布局无效,并且 立即返回。因此,您可以从 多次调用此方法的同一代码块,而不会触发多个布局更新。 实际布局更新在下一个视图布局更新周期中发生。

Apple Doc: Invalidate layout

相关问题