A tableView cell of UITableViewCellStyleSubtitle will truncate text.
Also, a regular UITableCell of multiple lines will truncate text if the delete slide is used.
However, my UITableViewCellStyleSubtitle cell of mulitple lines doesn’t truncate the text when delete slide comes in. Instead, it stretches outside the boundaries of the cell. Can I fix this? Here is some of my code …
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"];
if (cell==nil){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellType"] autorelease];
// set the labels to the appropriate text for this row
cell.textLabel.text = [(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]groupName];
cell.textLabel.lineBreakMode=UILineBreakModeTailTruncation;
cell.textLabel.numberOfLines = 0;
if ([(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]isDynamic]){
cell.detailTextLabel.text = NSLocalizedString(@"dynamic", @"dynamic");
}
else {
//get and set the group size
int groupSize = [(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]groupSize];
if (groupSize == 1)
cell.detailTextLabel.text = NSLocalizedString(@"1Contact", @"1 contact");
else
cell.detailTextLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%dContacts", @"%d contacts"), groupSize];
}
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell *)[self tableView: tableView cellForRowAtIndexPath: indexPath];
CGRect frame = [UIScreen mainScreen].bounds;
CGFloat width = frame.size.width;
int section = indexPath.section;
NSString *title_string = cell.textLabel.text;
NSString *detail_string = cell.detailTextLabel.text;
CGSize title_size = {0, 0};
CGSize detail_size = {0, 0};
if (title_string && [title_string isEqualToString:@""] == NO ) {
title_size = [title_string sizeWithFont:[UIFont systemFontOfSize:22.0]
constrainedToSize:CGSizeMake(width, 4000)
lineBreakMode:cell.textLabel.lineBreakMode];
}
if (detail_string && [title_string isEqualToString:@""] == NO ) {
detail_size = [detail_string sizeWithFont:[UIFont systemFontOfSize:18.0]
constrainedToSize:CGSizeMake(width, 4000)
lineBreakMode:cell.detailTextLabel.lineBreakMode];
}
CGFloat title_height = title_size.height;
CGFloat detail_height = detail_size.height;
CGFloat content_size = title_height + detail_height;
CGFloat height;
switch ( section ) {
case 0:
height = content_size;
break;
//Just in case
default:
height = 44.0;
break;
}
return height;
}
This was so tough to work out! The problem is that it will always stretch the text if numberOfLines is set to 0. Therefore, I needed to calculate the numberOfLines, and set it for each cell.