8

我想创建一个具有不同行高的 UITableView,我试图通过在 UITableViewCells 中创建 UILabel 来实现这一点。

到目前为止,这是我的代码:

- (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
----------------

有谁知道如何正确地做到这一点?

谢谢。

4

3 回答 3

11

UITableViewDelegate 定义了一个可选方法 heightForRowAtIndexPath,它将帮助您入门。然后您需要使用 sizeWithFont。

这里有一些关于你的确切问题的讨论:

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

此线程中还讨论了文本大小

于 2008-09-24T16:53:06.297 回答
1

这段代码对我有用。不知道它是否完美,但有效。

- (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;
    }
}
于 2010-03-01T19:07:54.877 回答
-2

textView.numberOfLines = 2?numberOflines 设置最大行数,所以也许 2 会为你工作?

于 2008-12-10T21:43:04.690 回答