在 UITableViewDelegate 方法 heightForRowAtIndexPath 中获取表格视图单元格属性:

Posted

技术标签:

【中文标题】在 UITableViewDelegate 方法 heightForRowAtIndexPath 中获取表格视图单元格属性:【英文标题】:Get table view cell properties in UITableViewDelegate method heightForRowAtIndexPath: 【发布时间】:2012-02-20 15:27:13 【问题描述】:

我有一个带有自定义表格视图单元格的表格视图。它们的高度取决于单元格中出现的文本数量。这是我的 UITableViewDelegate 方法 heightForRowAtIndexPath 的代码:

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

    NSInteger row = [indexPath row];

    NSDictionary *factor = [self.factorsArray objectAtIndex:row];

    CGSize maximumLabelSize = CGSizeMake(260, kMaximumFactorLabelHeight);
    CGSize labelSize = [[factor objectForKey:@"text"] sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:14.0]
                                 constrainedToSize:maximumLabelSize
                                     lineBreakMode:UILineBreakModeWordWrap];

    return (labelSize.height + 72);

此代码完美运行。我的问题是这里有很多东西是硬编码的:

表格视图单元格中标签的宽度 字体名称 字体大小 “72”是除了标签高度之外需要添加到单元格的额外高度。

我可以从包含自定义表格视图单元格的 xib 文件中获取所有这些信息。但是我如何在 heightForRowAtIndexPath: 中得到它?我试过 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 但我遇到了崩溃,我相信是因为调用 heightForRowAtIndexPath 方法时单元格还不存在。

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。我通常在 UITableViewCell 子类上有一个类方法来根据传入的内容返回高度。

【讨论】:

但是如何在类方法中获取表格视图单元格(在 xib 文件中定义)中标签的字体? 您可以加载笔尖并从中获取正确的信息。不过,这可能不是最好的方法。当我有可变高度的单元格时,我不使用笔尖,通常直接绘制我的文本。 好的,谢谢,我需要从 nib 获取信息,因为我的客户希望能够通过编辑 nib 文件来调整外观。我想我会加载 nib 文件。

以上是关于在 UITableViewDelegate 方法 heightForRowAtIndexPath 中获取表格视图单元格属性:的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 iOS 中的 UITableViewDelegate 方法的情况下获取选择的 UITableViewCell

如何从 UITableViewDelegate 的 didSelectRowtAtIndexPath 方法显示 UINavigationController?

Swift 3.0 和 Xcode 8 迁移后未调用 UITableViewDelegate 方法

UITableViewDelegate 和 UITableViewDatasource 的区别

再次点击该行时,不会调用 UITableViewDelegate didDeselectRowAt 方法[重复]

是否有任何理由为啥我的 UITableViewCell 的覆盖 setHighlighted 不会被调用但 UITableViewDelegate 方法会?