Изменение размера UITableViewCells в iOS4 по сравнению с iOS3 - PullRequest
2 голосов
/ 06 февраля 2011

Я использую следующий код для определения размера ячейки 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 Ответ

0 голосов
/ 06 февраля 2011

В этом фрагменте кода вы просто вычисляете правильную высоту строки и даете ее таблице. Поэтому я полагаю, что высота ячейки будет правильной в обоих случаях (iOS 4 и iOS 3). Что происходит, так это то, что вы ничего не делаете для настройки двух меток в ячейке contentView, поэтому, вероятно, ячейка iOS 4 автоматически настраивается, а iOS 3 нет. Теперь вы можете попытаться изучить иерархию ячеек субтитров в iOS 3 и применить правильные изменения, или вы можете сделать свои собственные пользовательские метки и добавить их в иерархию contentView: конечно, эти пользовательские метки будут иметь рамку, количество строк, шрифт, .. рассчитывается так же, как вы использовали в коде высоты строки (поэтому вы должны начать рефакторинг своего кода, экспортировав вычисление высоты строки обычным методом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...