UITableViewCell 的高度如何设置

Posted

技术标签:

【中文标题】UITableViewCell 的高度如何设置【英文标题】:How does the height of a UITableViewCell get set 【发布时间】:2011-01-08 01:22:43 【问题描述】:

我知道当 UIKit 渲染一个单元格时,它使用tableView:heightForRowAtIndexPath: 来计算高度。我的问题是,如何以及何时将其设置在实际的 UITableViewCell 上。我想构建动态单元格,并且需要计算单元格内文本的位置。我相信我可以只使用 self.bounds 和 self.frame - 我只是好奇它们是在什么时候设置的 - 即使使用 dequeueReusableCellWithIdentifier

谢谢。

【问题讨论】:

【参考方案1】:

tableView:cellForRowAtIndexPath: 返回单元格后,tableview 会设置许多属性,包括单元格的边界,然后调用tableView:willDisplayCell:forRowAtIndexPath:。该调用之后的唯一修改是设置 alpha/frame,即使这样也仅在为行设置动画时进行。

鉴于此,如果您使用的是股票UITableViewCell,您可以在tableView:willDisplayCell:forRowAtIndexPath: 中布局您的文本,并确保单元格已经具有正确的宽度/高度。也就是说,如果您要做的不仅仅是基础知识,您可能需要考虑子类化UITableViewCell。在您的子类中,您可以在 layoutSubviews 中布置您的字段,并确保您的单元格将始终正确布置。

【讨论】:

我的目标是使用 drawRect 绘制单元格的内容,因此我将继承 UITableViewCell。我应该在 tableView:willDisplayCell:forRowAtIndexPath: 中调用 setNeedsDisplay,还是应该从 UiTableViewCell 的 layoutSubviews 中调用它?是否有概述流程的文档,以便我了解如何最好地做到这一点?感谢您的帮助。【参考方案2】:

您可以像这样使用heightForRowAtIndexPath 委托:

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

    CGFloat result;
    result = 120.0f;
    return result;

上面的示例将设置在canEditRowAtIndexPath 委托中创建的任何单元格帽子。

您也可以使用部分和行值来确定设置高度的单元格/部分。

【讨论】:

感谢您的帮助,但我感兴趣的是 UITableViewCell 在什么时候知道它的高度 - 而不是我告诉 UITableViewController 单元格的高度应该是多少。 返回单元格,这就是 UITableView 寻找 cellHeight 的地方。 我想我应该问,我的 UITableViewCell 什么时候知道它的高度,所以我可以调用 [UITableViewCell setNeedsDisplay]?【参考方案3】:

您可以扩展自定义单元格

- (void)drawRect:(CGRect)rect

//You need to do your calculation for 
[super drawRect:rect];

您需要进行计算,使其出现在drawRect中单元格的正确位置。

【讨论】:

这不仅不是他所要求的,而且如果单元格有背景视图(就像分组的 tableview 单元格一样),这甚至都行不通。

以上是关于UITableViewCell 的高度如何设置的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 的高度如何设置

如何设置默认的 UITableViewCell 高度?

UITableViewCell 高度

如何根据设备屏幕objective-c设置UITableViewCell高度

根据 UILabel 的高度设置 UITableViewCell 的高度

如何使用 UILabel 的高度正确增加 UITableViewCell