I’ve got a custom cell that contains 3 UILabels. The last label will contain text that has embedded \n’s so that the data in that cell is listed one item per line. I know the number of lines needed and I know that each line needs to be 15 pixels high. The code I’ve got to change the size of this label is here:
//Set up the cell
static NSString *CellIdentifier = @"Cell";
CustomHistoryCell *cell = (CustomHistoryCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomHistoryCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
cell.probeInfo.lineBreakMode = UILineBreakModeWordWrap;
cell.probeInfo.numberOfLines = 0;
cell.probeInfo.text = theProbes;
[cell.probeInfo setAdjustsFontSizeToFitWidth:YES];
CGRect newFrame = cell.probeInfo.frame;
newFrame.size.height = nAdditionalLabelHeight*15;
cell.probeInfo.frame = newFrame;
theProbes contains the text with the \n’s and nAdditionalLabelHeight contains the number of lines. I’ve set the background color to grey so that I can see if the label is correctly sized and it doesn’t change it’s height. Can anyone see what I’m doing wrong?
Here’s the code for the custom cell .h file in case that may help:
@interface CustomHistoryCell : UITableViewCell {
UILabel *_stokerName;
UILabel *_smokeDateTime;
UILabel *_probeInfo;
}
@property (nonatomic,retain) UILabel *stokerName;
@property (nonatomic,retain) UILabel *smokeDateTime;
@property (nonatomic,retain) UILabel *probeInfo;
@end
And here’s the code for the custom cell .m file in case that may help:
#import "CustomHistoryCell.h"
@implementation CustomHistoryCell
@synthesize stokerName = _stokerName;
@synthesize smokeDateTime = _smokeDateTime;
@synthesize probeInfo = _probeInfo;
- (id)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
{
// Initialization code
self.stokerName = [[UILabel alloc]init];
self.stokerName.textAlignment = UITextAlignmentLeft;
self.stokerName.font = [UIFont boldSystemFontOfSize:20];
self.smokeDateTime = [[UILabel alloc]init];
self.smokeDateTime.textAlignment = UITextAlignmentLeft;
self.smokeDateTime.font = [UIFont systemFontOfSize:12];
self.probeInfo = [[UILabel alloc]init];
self.probeInfo.textAlignment = UITextAlignmentLeft;
self.probeInfo.font = [UIFont systemFontOfSize:12];
self.probeInfo.backgroundColor = [UIColor grayColor];
[self.contentView addSubview:self.stokerName];
[self.contentView addSubview:self.smokeDateTime];
[self.contentView addSubview:self.probeInfo];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
CGRect contentRect = self.contentView.bounds;
CGFloat boundsX = contentRect.origin.x;
CGRect frame;
frame= CGRectMake(boundsX+5,5, 300, 25);
self.stokerName.frame = frame;
frame= CGRectMake(boundsX+5,30, 300, 15);
self.smokeDateTime.frame = frame;
frame= CGRectMake(boundsX+5,45, 300, 15);
self.probeInfo.frame = frame;
}
- (void)dealloc
{
[super dealloc];
}
@end
I figured out a way to handle this. I basically override the initWithStyle and passed in the nAdditionalLabelHeight variable and then used this to set the height of the label.