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

问题描述 投票:0回答:4

在我的

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

ios swift uicollectionview uicollectionviewcell
4个回答
0
投票

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

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

0
投票

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

cellForItem(at:)

您可以将此方法与 UICollectionView 对象一起使用来获取特定索引处的单元格。 当您获得任何特定单元格时,您可以使用该单元格内的

contentView
框架检查该单元格的高度

Apple 文档:UICollectionView cellForItem


如果您想在第一次设置后更新单元格大小,您可以调用 UICollectionView 的 collectionViewLayout 属性的

invalidateLayout
方法。此方法会重新生成您的布局,在您的情况下这意味着还要调用
-collectionView: layout: sizeForItemAtIndexPath:
,这是反映您所需的项目大小的正确位置。

无效布局
使当前布局无效并触发布局更新。

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

Apple Doc:使布局无效


0
投票

您可以向

collectionViewLayout
询问布局属性,这将为您提供高度等信息:

let layoutAttributes = collectionView.collectionViewLayout.layoutAttributesForItem(at: indexPath)
let height = layoutAttributes?.frame.height

-1
投票

使用数组来存储每个

cell
的大小。

因此,当您想知道

cell[i]
之前的大小时,它将位于
array[i-1]
位置。

© www.soinside.com 2019 - 2024. All rights reserved.