3

我需要只有簡單的UICollectionViewCell樣式與每個頂部的單元格。像tableview一樣。但我需要動態高度依賴的內容,大小內容是評論它可以變化。如何從其內容設置動態uicollectionviewcell大小 - 以編程方式

我 viewDidLoad中:

[self.commentsCollectionView registerClass:[GWCommentsCollectionViewCell class] forCellWithReuseIdentifier:@"commentCell"]; 

在.H我:

,我#IMPORT我​​的自定義UICollectionViewCell,設置與編程自動佈局所有約束。

我實例與UICollectionView:

UICollectionViewFlowLayout *collViewLayout = [[UICollectionViewFlowLayout alloc]init]; 
self.commentsCollectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:collViewLayout]; 

我用autolatyout得到UICollectionView是,我想(這就是爲什麼CGRectZero)。

最後,我希望能做到這一點:

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

    GWCommentsCollectionViewCell *cell = (GWCommentsCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath]; 

    return cell.singleCommentContainerview.bounds.size; 
} 

singleCommentContainerview是內容查看的直接子視圖和withing的singleCommentContainerview我有UILabels,UIImageViews的等,都設置witih autolayoutcode。

但我剛剛得到的(0,0)

cgsize值我怎樣才能解決這個問題得到適當的大小,我需要爲每個單元?

回答

0

從我讀過的內容來看,UICollectionView需要在佈置單元格之前制定出的大小。所以你的上述方法該單元格尚未繪製,因此它沒有大小。這也可能是一個問題,或者與單元格被緩存/池化爲同一個標識符@「commentCell」的問題相結合,我通常用一個新的標識符和類標記唯一的單元格。

我的想法是趕細胞被繪製之前,按大小成詞典的使用後,使用:

- (void)collectionView:(UICollectionView *)collectionView 
     willDisplayCell:(UICollectionViewCell *)cell 
    forItemAtIndexPath:(NSIndexPath *)indexPath{ 

GWCommentsCollectionViewCell *cell = (GWCommentsCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath]; 
// Need to add it to the view maybe in order for it the autolayout to happen 
[offScreenView addSubView:cell]; 
[cell setNeedsLayout]; 

CGSize *cellSize=cell.singleCommentContainerview.bounds.size 
NSString *key=[NSString stringWithFormat:@"%li,%li",indexPath.section,indexPath.row]; 
// cellAtIndexPath is a NSMutableDictionary initialised and allocated elsewhere 
[cellAtIndexPath setObject:[NSValue valueWithCGSize:cellSize] forKey:key]; 

} 

然後,當你需要它使用基於字典的關鍵進入尺寸。

它不是一個真正超級漂亮的方式,因爲它依賴於繪製的視圖,自動佈局在獲得大小之前做它的事情。如果你更加載圖片,它可能會引發問題。

也許更好的方法是預先編程大小。如果您有關於圖像尺寸的數據可能會有所幫助。檢查這篇文章的一個很好的教程(嚴編程無IB):

https://bradbambara.wordpress.com/2014/05/24/getting-started-with-custom-uicollectionview-layouts/

+0

我有一個完整的解決方案即將推出,上面是不對的! – elliotrock

-1

添加

class func size(data: WhateverYourData) -> CGSize { /* calculate size here and  retrun it */} 

到您的自定義單元格和與其做

return cell.singleCommentContainerview.bounds.size 

它應該是

return GWCommentsCollectionViewCell.size(data) 
+0

錯誤的語言,問題是關於objective-c – picciano

+0

@picciano - oops。哈哈。 – HMHero

相關問題