Dynamically change cell height in object C

I have created a table view application. Which uses a view and a label in each cell. But if I create views and cells in the code (! Cell), it returns empty cells, and if I delete the condition (! Cell), it will display the data, but will not accept the dynamic height. Can someone please help me.

- (void)viewDidLoad{ NSString *Path = [[NSBundle mainBundle] bundlePath]; NSString *DataPath = [Path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", LanguageFile]]; NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:DataPath]; self.reloadArray = [tempDict objectForKey:@"Rows"];} -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [self.reloadArray count]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // Get data for the current row NSString *textData = [reloadArray objectAtIndex:indexPath.section] CGFloat dataTextHeight = [self getLabelHeightForIndex:textData]; if(dataTextHeight < 44) { dataTextHeight = 44; } return dataTextHeight; } -(CGFloat)getLabelHeightForIndex:(NSString *)string { CGSize maximumSize = CGSizeMake(280, 10000); CGSize labelHeightSize = [string sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14.0f] constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping]; if(labelHeightSize.height < 44){ labelHeightSize.height = 44; } return labelHeightSize.height; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; static const int textViewTag = 1, textLabelTag = 2; UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"standard_back.png"]]; img.frame = tableView.frame; tableView.backgroundView = img; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; // First view UIView *textView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, 280.0, 36.00)]; textView.tag = textViewTag; textView.autoresizingMask = UIViewAutoresizingFlexibleWidth; [cell.contentView addSubview:textView]; // First label UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0, 270.0, 36.00)]; textLabel.tag = textLabelTag; textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0f]; textLabel.textColor = [UIColor whiteColor]; textLabel.backgroundColor = [UIColor clearColor]; textLabel.numberOfLines = 0; textLabel.lineBreakMode = NSLineBreakByWordWrapping; textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; // textLabel.clipsToBounds = YES; [cell.contentView addSubview:textLabel]; } NSString *textData = [reloadArray objectAtIndex:(indexPath.section)]; CGFloat dataTextHeight = [self getLabelHeightForIndex:textData]; UIView *textView = [cell.contentView viewWithTag:textViewTag]; CGRect textViewFrame = textView.frame; textView.frame = CGRectMake(0.0, 0.0, textViewFrame.size.width, dataTextHeight); UILabel *textLabel = [cell.contentView viewWithTag:textLabelTag]; CGRect textLabelFrame = textLabel.frame; textLabel.frame = CGRectMake(10.0, 0.0, textLabelFrame.size.width, dataTextHeight); textLabel.text = textData; textLabel.backgroundColor= [UIColor clearColor]; textLabel.textAlignment = NSTextAlignmentCenter; cell.backgroundColor = [UIColor colorWithWhite:0 alpha:.65]; cell.textLabel.numberOfLines = 0; // Multiline cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; cell.textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; return cell; } 

Thanks in advance.

+4
source share
3 answers

This is part of my code that I used in my application. This works fine for me. Email me if you need help.

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; { CGSize constraintSize = {230.0, 20000}; //230 is cell width & 20000 is max height for cell CGSize neededSize = [ [NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row]] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeCharacterWrap]; return MAX(45, neededSize.height +33); } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } CGSize constraintSize = {230.0, 20000}; UILabel* label = [[UILabel alloc] init]; [label setNumberOfLines:0]; label.backgroundColor = [UIColor clearColor]; [label setFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f]]; label.adjustsFontSizeToFitWidth = NO; CGSize neededSize = [ [NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row] ] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeCharacterWrap]; // NSLog(@"Height%f",neededSize.height); //NSLog(@"width%f",neededSize.width); [label setText:[NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row] ]]; [label setFrame:CGRectMake(10, 2, 230, MAX(neededSize.height+30, 44.0f))]; [[cell contentView] addSubview:label]; cell.selectionStyle=UITableViewCellSelectionStyleNone; return cell; } 

Hope this helps. !!!

+1
source

I saw a lot of solutions, but it was all wrong or not. You can solve all the problems with 5 lines in viewDidLoad and autorun. This is for object C:

 _tableView.delegate = self; _tableView.dataSource = self; self.tableView.estimatedRowHeight = 80;//the estimatedRowHeight but if is more this autoincremented with autolayout self.tableView.rowHeight = UITableViewAutomaticDimension; [self.tableView setNeedsLayout]; [self.tableView layoutIfNeeded]; self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0) ; 

For quick 2.0:

  self.tableView.estimatedRowHeight = 80 self.tableView.rowHeight = UITableViewAutomaticDimension self.tableView.setNeedsLayout() self.tableView.layoutIfNeeded() self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0) 

Now create your cell using xib or as a table in your storyboard. You do not need to override or redefine anything. (Don forget number os lines 0) and the lower label (restriction) to lower the "Priority of crawling content - vertical to 250"

enter image description here

You can download the code at the following URL: https://github.com/jposes22/exampleTableCellCustomHeight

Links: http://candycode.io/automatically-resizing-uitableviewcells-with-dynamic-text-height-using-auto-layout/

+4
source
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return "your content height"; } 
0
source

All Articles