在sizeForItemAtIndexPath中调用UICollectionView单元格

时间:2017-08-24 12:22:45

标签: ios swift uicollectionview uicollectionviewcell uicollectionviewlayout

我希望能够在UICollectionViewCell函数中调用我的sizeForItemAtIndexPath类。像这样:

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

    let cell = MyCollectionViewCell()

    let itemHeights = cell.titleLabel.frame.size.height + cell.subtitleLabel.frame.size.height + 20 

    return CGSize(width: self.view.frame.size.width - 30, height: itemHeights + cell.thumbnail.frame.size.height)

}

问题在于cell.titleLabel.frame.size.heightcell.subtitleLabel.frame.size.heightcell.thumbnail.frame.size.height都返回nil。我认为这是因为每当调用sizeForItemAtIndexPath时,单元格尚未加载,而cellForItemAtIndexPath尚未被调用。

我需要知道这一点,因为cell.titleLabel可以是cellForItemAtIndexPath中设置的多行和宽度。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在您sizeForItemAt实际创建并配置所需数据之前,会调用<{cell。这就是您无法获得所需数据的原因。

试试这个:

dummy cell sizeForItemAt dequeuingcollectionView中创建func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) //Configure your cell with actual data cell.contentView.layoutIfNeeded() //Calculate the size and return } 。使用要显示的实际数据配置单元格。配置完成后,获取所需的数据,即

TRIGGER