sash
sash

Reputation: 8715

Current cell height inside the heightForRowAtIndexPath?

I have a table with static cells. For one cell I want to change its height depending on the label's height (inside that cell) and at the same time leave all other cells height intact. How can I get current cell's height? Or maybe there is better approach?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([indexPath section] == 2) {
        return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height;
    } else {
        return ...; // what should go here, so the cell doesn't change its height?
    }
}

Upvotes: 8

Views: 6230

Answers (6)

MGTLA
MGTLA

Reputation: 141

@talnicolas great answer, here's for Swift 3:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 2 {
        let easy = self.myLabel.frame
        return easy.origin.y *2 + easy.size.height
    } else {
        return super.tableView(tableView, heightForRowAt: indexPath)
    }
}

Upvotes: 1

talnicolas
talnicolas

Reputation: 14053

You can call:

[super tableView:tableView heightForRowAtIndexPath:indexPath] 

in the else block so you don't have to worry if ever you changed the default height.

Upvotes: 12

iPatel
iPatel

Reputation: 47049

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == youSectionNumber)
    {
        if (indexPath.row == numberOfrow)
        {
            return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height;
        }
    }

      return 44; // it is default height of cell;
}

Upvotes: 0

Ossir
Ossir

Reputation: 3145

You, maybe, want to calculate height of label in constrained width. In this case you can create method like that:

- (CGFloat)textHeightOfMyLabelText {
    CGFloat textHeight = [self.myLabel.text sizeWithFont:self.myLabel.font constrainedToSize:LABEL_MAX_SIZE lineBreakMode:self.myLabel.lineBreakMode].height;
    return textHeight;
}

and use result in - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath. Don't forget to add margin value of you label.

Upvotes: 0

Dharmbir Singh
Dharmbir Singh

Reputation: 17535

Please do this one

if ([indexPath section] == 2)
{
    if(indexPath.row == 1)
         return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
    else 
         tableView.rowHeight
}

Upvotes: 1

NSDmitry
NSDmitry

Reputation: 450

You can get/set default height tableView.rowHeight, or you can store your height before changing cell height, so you can get default height from some variable;

Upvotes: 4

Related Questions