Вопрос

Я хочу создать UITableView с различной высотой строк, и я пытаюсь достичь этого, создавая UILabels внутри UITableViewCells.

Вот мой код на данный момент:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"EntryCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    }

    UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 40)];
    textView.numberOfLines = 0;
    textView.text = [entries objectAtIndex:[indexPath row]];
    [cell.contentView addSubview:textView];
    [textView release];

    return cell;
}

Это дает мне 2 строки текста на ячейку.Однако каждая "запись" имеет разное количество строк, и я хочу, чтобы UITableViewCells автоматически изменял размер, перенося текст по мере необходимости, без изменения размера шрифта.

[textView sizeToFit] и/или [cell sizeToFit] похоже, это не работает.

Вот как я хочу, чтобы UITableView выглядел:

----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------

Кто-нибудь знает, как это сделать правильно?

Спасибо.

Это было полезно?

Решение

UITableViewDelegate определяет необязательный метод heightForRowAtIndexPath, который поможет вам начать.Затем вам нужно использовать sizeWithFont.

Здесь есть некоторое обсуждение вашей конкретной проблемы:

http://www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/

Размер текста также обсуждался в этот поток

Другие советы

Этот код работает у меня.Не знаю, идеально ли это, но работает.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if(indexPath.row<[notesModel numberOfNotes]){
        NSString *cellText = [@"Your text..."];
        UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:12.0];
        CGSize constraintSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 100, MAXFLOAT);
        CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

        return labelSize.height + 20;
    }
    else {
        return 20;
    }
}

TextView.numberOfLines = 2?numberOfLines устанавливает максимальное количество строк, так что, может быть, 2 будет работать для u?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top