Set Dynamically Height of the UITableViewCell

In this post I will show you how to set your table view cell heights dynamically based upon the text content without subclassing UITableViewCell. You can subclass it, however, doing so does not make the code much cleaner as setting the height is done in your delegate for the table view itself rather than the cell anyhow.When the text is short, it might fit in the normal cell label, however, if the text gets longer, you will want to resize the cell so that you can display the complete content. I’ve distilled the process of resizing table cells to a few rules of thumb.

Following thinks are need to implement into project.

  1. Create the UILabel and add into cell as a subview.
  2. Calculate the height of the UILabel and that according set the height of the cell.
  3. Insert the text into the UILabel.

For That below set of the steps follow.

Here All code is related for the UITableView .

Below code for the viewcontroller.h file and adding the UITableview and assign into the .xib file and give the datasource and delegate to the File’s Owner
{code type=”javascript”}

#import

@interface ViewController : UIViewController{
IBOutlet UITableView *dataTableView;
NSMutableArray *items;
}

@end

Following code for the viewcontroler.m file

{code type=”javascript”}

#import “ViewController.h”
#import

#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f

@interface ViewController ()

@end

@implementation ViewController

– (void)viewDidLoad
{
[super viewDidLoad];

items = [[NSMutableArray alloc] init];
[items addObject:@”Happiness is having a large, loving, caring, close-knit family in another city.\n\n\t\t-George Burns (1896 – 1996)”];
[items addObject:@”When I am abroad, I always make it a rule never to criticize or attack the government of my own country. I make up for lost time when I come home.\n\n\t\t-Sir Winston Churchill (1874 – 1965)”];
[items addObject:@”After two years in Washington, I often long for the realism and sincerity of Hollywood.\n\n\t\t-Fred Thompson, Speech before the Commonwealth Club of California”];
[items addObject:@”It is a profitable thing, if one is wise, to seem foolish.\n\n\t\t-Aeschylus (525 BC – 456 BC)”];
[items addObject:@”Bill Gates is a very rich man today… and do you want to know why? The answer is one word: versions.\n\n\t\t-Dave Barry”];
[items addObject:@”At the worst, a house unkept cannot be so distressing as a life unlived.\n\n\t\t-Dame Rose Macaulay (1881 – 1958)”];
[items addObject:@”It is curious that physical courage should be so common in the world and moral courage so rare.\n\n\t\t-Mark Twain (1835 – 1910)”];
[items addObject:@”The knowledge of the world is only to be acquired in the world, and not in a closet.\n\n\t\t-Lord Chesterfield (1694 – 1773), Letters to His Son, 1746, published 1774″];
[items addObject:@”What lies behind us and what lies before us are tiny matters compared to what lies within us.\n\n\t\t-Ralph Waldo Emerson (1803 – 1882), (attributed)”];
}

#pragma mark –
#pragma mark UITableView Delegaates

– (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return [items count];
}

– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
{
return 1;
}

– (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
NSString *text = [items objectAtIndex:[indexPath row]];
CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH – (CELL_CONTENT_MARGIN * 2), 20000.0f);
CGSize size = [text 1=”systemFontOfSize:FONT_SIZE” language=”sizeWithFont:[UIFont”][/text] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];
CGFloat height = MAX(size.height, 44.0f);
return height + (CELL_CONTENT_MARGIN * 2);
}

– (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
UILabel *label = nil;

cell = [tv dequeueReusableCellWithIdentifier:@”Cell”];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@”Cell”] ;
label = [[UILabel alloc] initWithFrame:CGRectZero];
[label setLineBreakMode:NSLineBreakByWordWrapping];
[label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[label setNumberOfLines:0];
[label setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[label setTag:1];
[[cell contentView] addSubview:label];
}
NSString *text = [items objectAtIndex:[indexPath row]];
CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH – (CELL_CONTENT_MARGIN * 2), 20000.0f);
CGSize size = [text 1=”systemFontOfSize:FONT_SIZE” language=”sizeWithFont:[UIFont”][/text] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];

if (!label)
label = (UILabel*)[cell viewWithTag:1];
[label setText:text];
[label setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH – (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];

return cell;
}
– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[dataTableView deselectRowAtIndexPath:[dataTableView indexPathForSelectedRow] animated:YES];
}
@end

Output

 

Grab the source code from here

Leave a Reply

Your email address will not be published. Required fields are marked *



*