我正在使用以下代码来调整UITableViewCellStyleSubtitle单元格的大小以适应可以运行到多行的文本:
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGRect frame = [UIScreen mainScreen].bounds;
CGFloat width = frame.size.width;
int section = indexPath.section;
int row = indexPath.row;
NSString *title_string = [[my_array_ objectAtIndex:row]
valueForKey:@"keyOne"];
NSString *detail_string = [[my_array_ objectAtIndex:row]
valueForKey:@"keyTwo"];
CGSize title_size = {0, 0};
CGSize detail_size = {0, 0};
if (title_string && ![title_string isEqualToString:@""]) {
title_size = [title_string sizeWithFont:
[UIFont systemFontOfSize:TITLE_FONT_SIZE]
constrainedToSize:CGSizeMake(width, 4000)
lineBreakMode:UILineBreakModeWordWrap];
}
if (detail_string && ![detail_string isEqualToString:@""]) {
detail_size = [detail_string sizeWithFont:
[UIFont systemFontOfSize:DETAIL_FONT_SIZE]
constrainedToSize:CGSizeMake(width, 4000)
lineBreakMode:UILineBreakModeWordWrap];
}
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; //+ offset;
break;
default:
height = 44.0;
break;
}
return height;
}
这在iOS4中运行良好。*并提供容纳文本的单元格。 (如果它们有点太大但是没关系。)
但是当我在iOS3中尝试这个时。*单元格混乱:textLabel在单元格中显示为低位,而detailLabel文本通常会溢出到下一个单元格中或被“...”截断。 textLabel似乎出现在单元格的中间,而不是顶部。
iOS3和iOS4之间可能有什么不同?我该怎么做才能解决这个问题?或者,是否有一个很好的替代上述(比如说)将适用于两个iOS。
提前感谢你。
答案 0 :(得分:0)
在这段代码中,如果你只计算正确的行高并将其赋予表格。所以我认为在这两种情况下(iOS 4和iOS 3),单元格高度都是正确的。会发生什么事情,你没有做任何事情来调整单元格contentView中的两个标签,所以可能iOS 4单元格是自动调整,而iOS 3没有。 现在您可以尝试研究iOS 3字幕单元格层次结构并应用正确的更改,或者您可以创建自己的自定义标签并将它们添加到contentView层次结构中:当然,这些自定义标签将具有其框架,行数,字体等。 ..以与行高代码中使用的相同方式计算(因此您应该通过以常用方法导出行高计算来开始重构代码)。