动态表格单元格高度(内容截断)

Posted

技术标签:

【中文标题】动态表格单元格高度(内容截断)【英文标题】:Dynamic table cell height (content cut off) 【发布时间】:2012-05-03 02:36:37 【问题描述】:

我正在尝试使用具有动态高度的单元格创建一个表格视图,一切似乎都工作正常,但后来我注意到了这个奇怪的问题。 当我向下滚动列表并返回时,某些单元格似乎没有完全绘制内容。

正确内容:https://www.dropbox.com/s/eqsx4p6dmsofrko/Screen%20Shot%202012-05-03%20at%2010.30.11%20AM.png

内容截取:https://www.dropbox.com/s/qqelftkc5jzetk5/Screen%20Shot%202012-05-03%20at%2010.30.19%20AM.png

我在这里创建所有单元格:

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

    static NSString *CellIdentifier = @"ItemCell";
    ItemCell *cell = (ItemCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    Item *item = [self.activity objectAtIndex:indexPath.row];
    cell.projectLabel.text = item.project;
    cell.descriptionLabel.text = item.description;
    cell.timeLabel.text = item.time;
    cell.timeAgoLabel.text = item.timeAgo;
    //cell.avatar = [UIImageView item.avatar];

    cell.descriptionLabel.numberOfLines = 0;
    [cell.descriptionLabel sizeToFit];

    // remove the right arrow
    cell.accessoryType = UITableViewCellAccessoryNone;

    //[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation: UITableViewRowAnimationNone];

    return cell;

并使用它来改变单元格的高度:

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

    static NSString *CellIdentifier = @"ItemCell";
    ItemCell *cell = (ItemCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    CGSize descriptionHeight = [cell.descriptionLabel.text sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

    NSInteger height = cell.projectLabel.frame.origin.y + cell.projectLabel.frame.size.height;
    height += descriptionHeight.height + 30;

    NSLog(@"height: %d", height);

    return height;

【问题讨论】:

我看不到照片.. 检查照片后 - 奇怪。从来没有遇到过这样的问题。有多少个细胞?我的意思是可能是因为内存泄漏 我只创建了 20 个单元格,我已经使用情节提要创建了一个自定义单元格,还没有发生什么事情 奇怪的是,它只发生在顶部超出屏幕的单元格上,一旦我滚动列表并且一个单元格到达底部,它就会恢复正常。我认为这可能与heightForRowAtIndexPath有关,当我将静态高度设置为120时,一切正常,但是当我将其设置为100时,我遇到了同样的问题 我发现问题是因为我重用了 dequeueReusableCellWithIdentifier 单元格,现在我只是直接从数据数组中抓取文本 【参考方案1】:

您是否尝试过调用 [self setNeedsDisplay] 来重新绘制表格视图?

【讨论】:

我在表格和单元格上都调用了它,但似乎没有帮助【参考方案2】:

不知道为什么这段代码可以工作,但您从未在 tableView:cellForRowAtIndexPath: 方法中创建单元格。我怀疑它在你的问题中被省略了。

[cell.descriptionLabel sizeToFit]; 行从您的tableView:cellForRowAtIndexPath: 移到此行上方

CGSize descriptionHeight = [cell.descriptionLabel.text sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

在你的tableView:heightForRowAtIndexPath:

然后调用

[cell setNeedsLayout];
[cell setNeedsDisplay];

之后。

【讨论】:

我正在使用带有原型单元的情节提要,并且只是重新使用那个。即使没有 sizeToFit 它也有同样的问题。一旦一个单元格超出显示屏,它就会剪切部分内容。【参考方案3】:

解决方案是从数据馈送中获取文本,而不是使用出列单元格。

【讨论】:

以上是关于动态表格单元格高度(内容截断)的主要内容,如果未能解决你的问题,请参考以下文章

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

动态表格视图单元格高度

具有动态高度单元格但所有单元格同时显示的 iOS 表格视图

使用动态增加单元格计算表格视图的内容大小

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

设置表格视图单元格的动态高度