在我的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
项目分配的高度。
答案 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 强>
使当前布局无效并触发布局更新。您可以随时调用此方法来更新布局信息。 此方法使集合视图本身的布局无效 马上回来。因此,您可以多次调用此方法 相同的代码块,不会触发多个布局更新。该 在下一个视图布局更新周期中发生实际布局更新。