title: IOS: dynamic height with a custom uitableviewcell
body: <p>I am new at ios development and this is my problem thus far.  I am able to dynamically calculate the height of a custom cell via the delegate "heightForRowAtIndexPath".  So on the first load, every thing is display perfectly fine.</p>
  
  <p>My problem is as soon as I start scrolling, everything just messes up.  I think that while scrolling the "heightForRowAtIndexPath" is no longer called per cell that get display on screen, so the new cell height cannot be calculated.</p>
  
  <p>So I've been stuck here for a while.  I was wondering if any of you could lend me a hand.  thank you in advance.</p>
  
  <p>I'll post the code to relevant files.  These files include the custom cell h and m file.  and relevant functions of the view controller m file.</p>
  
  <pre><code>// ######################################################
  // HelpTableViewCell.h
  #import &lt;UIKit/UIKit.h&gt;
  
  @interface HelpTableViewCell : UITableViewCell  {
    IBOutlet UILabel *labelName;
    IBOutlet UILabel *labelDescription;
  
    IBOutlet UIView *viewBackground;
  }
  
  @property (nonatomic, retain) UILabel *labelName;
  @property (nonatomic, retain) UILabel *labelDescription;
  
  @property (nonatomic, retain) UIView *viewBackground;
  
  @end
  
  // ######################################################
  // HelpTableViewCell.m
  #import "HelpTableViewCell.h"
  
  @implementation HelpTableViewCell
  
  @synthesize labelName;
  @synthesize labelDescription;
  
  @synthesize viewBackground;
  
  - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  
    if (self) {
    }
  
    return self;
  }
  
  - (void)setSelected:(BOOL)selected animated:(BOOL)animated  {
  
    self.labelName.lineBreakMode = UILineBreakModeWordWrap;
    self.labelName.numberOfLines = 0;
    self.labelName.font = [UIFont boldSystemFontOfSize:15];
    [self.labelName sizeToFit];
  
    self.labelDescription.lineBreakMode = UILineBreakModeWordWrap;
    self.labelDescription.numberOfLines = 0;
    self.labelDescription.font = [UIFont fontWithName:@"Arial" size:15];
    [self.labelDescription sizeToFit];
  
    [super setSelected:selected animated:animated];
  }
  
  - (void) dealloc  {
    [labelName release], labelName = nil;
    [labelDescription release], labelDescription = nil;
  
    [super dealloc];
  }
  
  @end
  
  
  // ######################################################
  // in my view controller m file
  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {  
    static NSString *CellIdentifier = @"HelpTableViewCell";
    HelpTableViewCell *cell = (HelpTableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  
    if (cell == nil)  {
      NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"HelpTableViewCell" owner:nil options:nil];
  
      for (id currentObject in topLevelObjects) {
        if ([currentObject isKindOfClass:[UITableViewCell class]])  {
          cell = (HelpTableViewCell *) currentObject;
          break;
        }
      }
  
    }
  
    cell.labelName.text = [self.instructionName objectAtIndex:indexPath.row];
    cell.labelDescription.text = [self.instructionDescription objectAtIndex:indexPath.row];
  
    return cell;
  }
  
  - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
      NSString *cellText = [self.instructionDescription objectAtIndex:indexPath.row];
      UIFont *cellFont = [UIFont fontWithName:@"Arial" size:15];
      CGSize constraintSize = CGSizeMake(320.0f, MAXFLOAT);
      CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
  
      return labelSize.height + 25;  
  }
  </code></pre>