Переменная высота UITableCellView с подпредставлением - PullRequest
8 голосов
/ 24 сентября 2008

Я хочу создать 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
----------------

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

Спасибо.

Ответы [ 3 ]

11 голосов
/ 24 сентября 2008

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

Здесь обсуждается ваша точная проблема:

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

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

1 голос
/ 01 марта 2010

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

- (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;
    }
}
0 голосов
/ 11 декабря 2008

textView.numberOfLines = 2? NumberOflines устанавливает максимальное количество строк, так что, возможно, 2 будет Owrk для вас?

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