我希望能够在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.height
,cell.subtitleLabel.frame.size.height
和cell.thumbnail.frame.size.height
都返回nil
。我认为这是因为每当调用sizeForItemAtIndexPath
时,单元格尚未加载,而cellForItemAtIndexPath
尚未被调用。
我需要知道这一点,因为cell.titleLabel
可以是cellForItemAtIndexPath
中设置的多行和宽度。
有什么想法吗?
答案 0 :(得分:0)
sizeForItemAt
实际创建并配置所需数据之前,会调用<{cell
。这就是您无法获得所需数据的原因。
试试这个:
从dummy cell
sizeForItemAt
dequeuing
在collectionView
中创建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