2012-11-05 100 views
7

我有一個包含不同自定義單元格的集合視圖。UICollectionView:UICollectionViewCell對象在sizeForItemAtIndexPath中始終爲空

這些單元格包含大小不同的不同內容。

單元格在故事板中定義,因此在代碼中不需要註冊。

所有我現在要做的是改變取決於內容的委託方法大小:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 

id cellAtIndexPath = [collectionView cellForItemAtIndexPath:indexPath]; 

NSLog(@"The cell: %@", cellAtIndexPath); 

... 
e.g. calling sizeToFit methods and cumulating the sizes of the cells' subviews 
... 

} 

的方法如預期的每一個細胞都被調用,但cellAtIndexPath總是返回NULL,不管我試過。 所以我無法訪問indexPath或其內容視圖中的單元格對象。

任何建議爲什麼我不能訪問單元格對象?

回答

11

collectionView:layout:sizeForItemAtIndexPath方法由集合視圖的流佈局對象調用。在之前,佈局要求單元格的大小在之前將單元格添加到集合視圖。你將不得不「計算所需的單元大小」並返回它。

+2

謝謝!所以,從這個角度來看,不可能根據子視圖來設置不同的單元高度(通常調用sizeToFit來計算它)? 根據它們的內容,是不是有可能「調整」單元的大小?例如。對於UILabels,你將不得不通過行和文本長度來計算高度。而這將是非常不準確的。 – crud21

+0

對。您可能會找到計算單元格大小的方法(如果它取決於其內容),但不能依賴單元格視圖。 (例如'NSString'提供了獲取文本大小的方法。) – chris

+4

這很愚蠢和不幸......如果你問它是否還不存在的單元格,UITableView'不會去數據源並獲取單元格? – jtbandes