1

hi i am using UICollectionView and in UICollectionViewCell i need one image (icon) one title and some description. i am new in IOS development i want UICollectionViewCell cell height depending on the content because may be title and image will have specific height but description have different height. can anyone help me to calculate the height of description label. should i use textview for description ?

NSDictionary *service1 = [NSDictionary dictionaryWithObjectsAndKeys:
                 @"Lorem ipsum dolor sit",@"title",
                 @"Lorem ipsum dolor sit is simply dummy text Lorem ipsum dolor sit is simply dummy text Lorem ipsum dolor sit is simply dummy text Lorem ipsum dolor sit is simply dummy text Lorem ipsum dolor sit is simply dummy text",@"Description",
                 @"image1.png",@"image",
                              nil
                ];
     NSDictionary *service2 = [NSDictionary dictionaryWithObjectsAndKeys:
                @"Lorem ipsum dolor sit", @"title",
                @"Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit Lorem ipsum dolor sit",@"Description",
                 @"image2.png",@"image",
                 nil
                               ];
dataarray = [[NSMutableArray alloc] initWithObjects:service1, service2, nil];


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *identifier = @"Cell";
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath] ;
    UIImage * img = [UIImage imageNamed:[[dataarray objectAtIndex:indexPath.row] objectForKey:@"image"]];
    UIImageView* iv = [[UIImageView alloc] initWithFrame:CGRectMake(10,10,70,70)];
    iv.image = img;

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 90, 50, 20)];

    [titleLabel setText:[[dataarray objectAtIndex:indexPath.row] objectForKey:@"title"]];

    titleLabel.textColor = [UIColor blackColor];
    titleLabel.font = [UIFont fontWithName:@"Arial" size:8.5];
    titleLabel.backgroundColor = [UIColor clearColor];
    titleLabel.textAlignment = NSTextAlignmentLeft;

    [cell addSubview:titleLabel];


    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;

    UILabel *desclabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, screenWidth-20, 120)];

    [desclabel setText:[[dataarray objectAtIndex:indexPath.row] objectForKey:@"Description"]];

    titleLabel.textColor = [UIColor blackColor];
    titleLabel.font = [UIFont fontWithName:@"Arial" size:8.5];
    titleLabel.backgroundColor = [UIColor clearColor];
    titleLabel.textAlignment = NSTextAlignmentLeft;
    [titleLabel sizeToFit];

    [cell addSubview:titleLabel];
    [cell addSubview:desclabel];
    [cell addSubview:iv];

    return cell;

}

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

    // Adjust cell size for orientation
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {

        return CGSizeMake(screenWidth-10, 170.0f);
    }
    return CGSizeMake(screenWidth-10, 190.0f);
}
Ahmad Gulzar
  • 355
  • 2
  • 8
  • 23
  • http://stackoverflow.com/questions/14255692/dynamically-resizing-a-uicollectionviewcell – Manthan Oct 30 '14 at 10:56
  • @Manthan i have problem with description text. how do i check the dynamic height of description label? – Ahmad Gulzar Oct 30 '14 at 11:00
  • :Instead calculate the size of your description text and pass that size directly. – Manthan Oct 30 '14 at 11:05
  • Take UITableview and check this http://stackoverflow.com/questions/5161782/how-to-get-a-uitableview-row-height-to-auto-size-to-the-size-of-the-uitableviewc – Manthan Oct 30 '14 at 11:26

1 Answers1

1

Ok, now I see. You need to dynamically calculate the multiline UITextView height and increase the default UITableViewCell row height according to it.

Try to use something like this.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath)path
{
  // take the text value
  NSString *description = service1[@"title"];
  // initial rect value
  CGRect textFrame = CGRectMake(0,0,cellWidth,10000); // width value is enough for this operation
  UITextView *myTextView = [[UITextView alloc] initWithFrame:textFrame]; // create textview
  // set text view attributes as multiline, font, font size etc.
  myTextView.text = description;
  CGSize size = [myTextView sizeThatFits:myTextView.frame.size]; // that's all
  CGFloat height = size.height + someDefaultCellHeight;
  return height;
}

You may create some private UITextView member in -(void)viewDidLoad method for not to create it each time the heightForRow delegate method calls.

Daniyar
  • 2,975
  • 2
  • 26
  • 39