title: dynamic calculation of UILabel width in UITableViewCell
body: <p>I am building a custom, in-application settings view based on UITableViewCellStyle1 (or so). </p>
  
  <p>I am trying to dynamically calculate the width of the left label (title) of a cell to determine how wide my text field on the right can be.</p>
  
  <p>When I launch the app in the simulator and the view loads, the width of the title labels is zero until I scroll down the view and a cell is not visible, then when I scroll back up the size adjusts as expected. I believe this might have to do something with cell reusage. </p>
  
  <p>I need the title labels in the cells to have their correct width when the view loads, not after they have gone out of sight one time.</p>
  
  <pre><code>- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
    {
        static NSString* reuseIdentifier = @"SettingsCell";
  
  UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
  
  if ( !cell )
  {   
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier] autorelease];
      [cell setBackgroundColor:[UIColor baeDarkGrayColor]];
  
  
      UILabel* cellLabel = [cell textLabel];
      [cellLabel setTextColor:[UIColor whiteColor]];
      [cellLabel setBackgroundColor:[UIColor clearColor]];
  
      [cell setUserInteractionEnabled:YES];
      [cell setSelectionStyle:UITableViewCellSelectionStyleGray];
  }
  
  // Populate cell with corresponding data.
  NSDictionary* tableSection = [_tableData objectAtIndex:indexPath.section];
  
  // Set the label
  UILabel* textLabel = [cell textLabel];
  NSString* labelString = [[tableSection objectForKey:@"itemTitles"] objectAtIndex:indexPath.row];
  [textLabel setText:labelString];
  
     //   CGSize constrainedSize;
    //    constrainedSize.width = MAXFLOAT;
   // constrainedSize.height = MAXFLOAT;
  
  CGSize textLabelSize = [textLabel.text sizeWithFont:textLabel.font /*constrainedToSize:constrainedSize*/];
  
  NSLog(@"text label width: %f", textLabelSize.width);    
  
  
  // Set the accessory view
  BAESettingsTableCellAccessoryType accessoryType = [[[tableSection objectForKey:@"itemAccessories"] objectAtIndex:indexPath.row] integerValue];
  switch ( accessoryType )
  {
      case BAESettingsTableCellAccessoryDisclosureIndicator:
      {
          UIImageView* disclosureView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"AccessoryDisclosure.png"]];
          [cell setAccessoryView:disclosureView];
          [disclosureView release];
          break;
      }
      case BAESettingsTableCellAccessoryOnOffSwitch:
      {
          UISwitch* onOffSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
          [onOffSwitch setOn:YES];
          [cell setAccessoryView:onOffSwitch];
          [onOffSwitch release];
          break;
      }
      case BAESettingsTableCellAccessoryNone:
          // default:
          // break;
      {
  
          CGRect cellFrame = [cell frame];
  
          float detailTextFieldWidth = cellFrame.size.width - ( textLabelSize.width + 50 );
          float detailTextFieldHeight = cellFrame.size.height - 1;
  
          NSLog(@"detail text field calculated frame width, height, %f, %f", detailTextFieldWidth, detailTextFieldHeight);
  
  
          CGRect frame = CGRectMake(cellFrame.origin.x, cellFrame.origin.y, detailTextFieldWidth, detailTextFieldHeight);
  
  
          UITextField* textField = [[UITextField alloc] initWithFrame:frame];
          NSString* detailLabelString = [[tableSection objectForKey:@"itemDetailStrings"] objectAtIndex:indexPath.row];
          textField.text = detailLabelString;
          textField.textColor = cell.detailTextLabel.textColor;
          textField.textAlignment = UITextAlignmentRight;
          textField.borderStyle = UITextBorderStyleRoundedRect;
          [cell setAccessoryView:textField];
          [textField release];
          break;
      }
  
  }
  
  return cell;
     }
  </code></pre>