Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamic cell width of UICollectionView depending on label width

I have a UICollectionView, that loads cells from reusable cell, which contains label. An array provides content for that label. I can resize label width depending on content width easily with sizeToFit. But I cannot make cell to fit label.

Here's the code

- (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view, typically from a nib.     arrayOfStats =  @[@"time:",@"2",@"items:",@"10",@"difficulty:",@"hard",@"category:",@"main"]; }  - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:     (NSInteger)section{     return [arrayOfStats count]; }  - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{      return CGSizeMake(??????????); }  - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{      return 1; }  - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{      Cell *cell = (Cell *) [collectionView dequeueReusableCellWithReuseIdentifier:@"qw" forIndexPath:indexPath];     cell.myLabel.text = [NSString stringWithFormat:@"%@",[arrayOfStats objectAtIndex:indexPath.item]];     // make label width depend on text width     [cell.myLabel sizeToFit];      //get the width and height of the label (CGSize contains two parameters: width and height)     CGSize labelSize = cell.myLbale.frame.size;      NSLog(@"\n width  = %f height = %f", labelSize.width,labelSize.height);      return cell; } 
like image 319
pulp Avatar asked Apr 17 '14 13:04

pulp


1 Answers

In sizeForItemAtIndexPath return the size of the text

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{      return [(NSString*)[arrayOfStats objectAtIndex:indexPath.row] sizeWithAttributes:NULL]; } 
like image 70
Basheer_CAD Avatar answered Oct 09 '22 22:10

Basheer_CAD