Изменение размера UITableViewCells в iOS4 по сравнению с iOS3
Я использую следующий код для определения размера ячейки 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.
Заранее благодарим Вас.
1 ответ
В этом фрагменте кода вы просто вычисляете правильную высоту строки и даете ее таблице. Поэтому я полагаю, что высота ячейки будет правильной в обоих случаях (iOS 4 и iOS 3). Что происходит, так это то, что вы ничего не делаете для настройки двух меток в ячейке contentView, поэтому, вероятно, ячейка iOS 4 автоматически настраивается, а iOS 3 нет. Теперь вы можете попытаться изучить иерархию ячеек субтитров iOS 3 и применить правильные изменения, или вы можете сделать свои собственные пользовательские метки и добавить их в иерархию contentView: конечно, эти пользовательские метки будут иметь свой фрейм, количество строк, шрифт, ... рассчитывается так же, как вы использовали в коде высоты строки (поэтому вы должны начать рефакторинг своего кода, экспортировав вычисление высоты строки в общем методе).