2017-02-11 53 views
0

在我UICollectionView我使用委託方法設置不同cell項目不同的高度:我怎樣才能獲得一個特定項目的高度,我UICollectionView

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

你想要得到的尺寸或設置大小?有問題,你問'得到'的大小在最後你寫'設置'的大小 – HardikDG

+0

@AdiHardik謝謝..你想要得到的大小 –

+0

更新與這兩種情況下,可能會有所幫助 – HardikDG

回答

0

您可以從您的控制器調用委託方法。

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

我想獲得高度我以前分配了一個特定的細胞項目 –

0

使用數組來存儲每個cell的大小。

所以,當你想知道cell[i]的以前的大小,那麼它將在位置array[i-1]

+0

想法。不錯.. –

+0

是啊!使其成爲全球。根據您的要求。 –

+0

通常我需要爲情況1設置動態大小。其中我是那個硬編碼的250 –

0

如果您已經安裝了UICollectionView,並在以後的時間,你想要得到的任何單元格的高度,您可以使用以下方法來獲取單元格的高度

cellForItem(at:) 

您可以使用此方法與您UICollectionView對象獲取特定索引處的單元格。 當你得到任何特定的細胞,可以使用細胞內contentView的框架檢查電池的高度

Apple Doc :UICollectionView cellForItem


如果希望在您設置您可以第一時間更新單元尺寸請致電 invalidateLayout您的UICollectionView的collectionViewLayout屬性的方法。此方法重新生成您的佈局,在您的情況下也意味着調用-collectionView: layout: sizeForItemAtIndexPath:,這是反映您所需項目大小的正確位置。

的invalidateLayout
失效當前佈局並觸發佈局更新。

您可以隨時調用此方法更新佈局信息。 此方法使收集視圖本身的佈局無效,並且 立即返回。因此,您可以從 多次調用此方法的同一代碼塊,而不會觸發多個佈局更新。 實際佈局更新在下一個視圖佈局更新週期中發生。

Apple Doc: Invalidate layout

相關問題