1

我希望能夠在sizeForItemAtIndexPath函數中調用我的UICollectionViewCell類。就像這樣:調用大小爲UICollectionView的單元格forItemAtIndexPath

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中設置的多行和寬度。

有什麼想法?

+0

也許這可以幫助https://stackoverflow.com/questions/30405063/setting-cell-height-of-collectionview-doesnt-really-expand-cell-滾動 – ryantxr

+1

您不應該使用'cellForItemAt:'以外的函數對某個單元格出隊列即使您將某個單元格出列,您也不會得到一個填充了該索引路徑值的單元格。您需要根據單元格的數據計算高度值,或者使用自動單元格高度併爲您的單元格提供合理的'estimatedSize' – Paulw11

回答

0

sizeForItemAt在您的cell實際創建並配置了所需數據之前被調用。這就是你沒有得到你需要的正確數據的原因。

試試這個:

通過dequeuing它從collectionView創建sizeForItemAt一個dummy cell。使用您要顯示的實際數據配置單元格。配置它得到你所需要的數據,IE之後

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 
} 
相關問題