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 的高度如何设置的主要内容,如果未能解决你的问题,请参考以下文章
如何根据设备屏幕objective-c设置UITableViewCell高度