更改表格视图中的单元格高度Objective C

Posted

技术标签:

【中文标题】更改表格视图中的单元格高度Objective C【英文标题】:Changing cell height in table view Objective C 【发布时间】:2009-06-01 03:42:15 【问题描述】:

我希望我的单元格的高度会根据其中显示的文本而改变。文本会有所不同,我基本上希望单元格改变大小。这是我目前所拥有的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DefaultCell1"];
    CGRect cellRectangle;
    if (cell == nil) 

    cellRectangle = CGRectMake(0.0, 0.0, 300, 110);
    cell = [[[UITableViewCell alloc] initWithFrame:cellRectangle reuseIdentifier:@"DefaultCell1"] autorelease];
    

    UILabel *label;
    cellRectangle = CGRectMake(10, (40 - 20) / 2.0, 280, 110);

    //Initialize the label with the rectangle.
    label = [[UILabel alloc] initWithFrame:cellRectangle];
    label.lineBreakMode = UILineBreakModeWordWrap;
    label.numberOfLines = 20;

    label.font = [UIFont fontWithName:@"Helvetica" size:11.0];
    label.text = [[self.person.statusMessages objectAtIndex:indexPath.row]   valueForKey:@"text"];
    CGFloat height = [label.text sizeWithFont:label.font].height;

    //So right here is where I think I need to do something with height and 
    //see it to something tied to he cell

    [cell.contentView addSubview:label];

    [label release];

    return cell;

【问题讨论】:

Creating a UITableView with Taller Cells on the iPhone的可能重复 【参考方案1】:

您不应该在 cellForRowAtIndexPath 方法中设置高度。还有另一个 UITableViewDatasource 方法叫做 tableView:heightForRowAtIndexPath: 你应该实现它来返回单元格的高度。不过要小心使用它;您不能在此方法中获取该索引路径处的单元格;如果你这样做,你将构建一个无限递归循环。

编辑:要清楚;您需要仅根据单元格的内容而不是单元格本身来计算单元格的高度。

此外,在您创建单元格的代码中,您可以将 CGRectZero 传递给 frame 参数;如果您这样做,表格视图将自行计算单元格的框架(如果我没记错的话,在 OS 3.0 中也不推荐显式传递框架)。

【讨论】:

“您需要仅根据单元格的内容计算单元格的高度” 我知道单元格的内容。它是在“TableView cellForRowAtIndexPath”中设置的一些标签。如何更改表格单元格的大小?【参考方案2】:

如果所有行的高度相同,我认为在你的情况下是这样,你可以在你的 tableview 控制器中 setRowHeight。

- (id)initWithStyle:(UITableViewStyle)style 
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    self = [super initWithStyle:style];
    if (self) 
        // Custom initialization.
        NSLog(@"%s", __FUNCTION__);
        [self.tableView setRowHeight:110];
    
    return self;

行宽可以通过表格的superview宽度来控制

【讨论】:

以上是关于更改表格视图中的单元格高度Objective C的主要内容,如果未能解决你的问题,请参考以下文章

使用Objective C增加单元格数量时如何动态增加UITableView高度?

根据表格视图单元格中的内容更改 uilabel 高度

动态更改静态表格视图单元格高度

如何在表格视图中更改一个单元格的高度? [复制]

如何根据标签文本快速更改表格视图单元格高度?

动态表格视图单元格,以编程方式更改子视图高度