动态表格单元格高度

时间:2012-12-11 13:19:41

标签: objective-c uitableview

我有UITableView个自定义单元格。我需要在单元格中显示标题,地址,邮编,电话,电子邮件,网站和说明。所有这些信息都来自网络服务器。我可以从网络服务器显示内容。但是,如果任何内容为空,则该内容应存在间隙,如果描述太长,则无法显示所有内容。如何根据服务器的内容更改单元格的高度?请帮忙。

例如:内容打印如下: 标题 地址 压缩 手机...

但是,如果Address为nil,那么它看起来像: 标题

邮编 手机...

我有tableview:heightForRowAtIndexPath方法,但我无法根据单元格内容更新单元格高度。 对不起,问题格式不好

5 个答案:

答案 0 :(得分:2)

调整单元格大小会变得非常复杂,所以我建议您只使用表格视图框架,例如“Sensible TableView”,其中所有单元格都会自动调整大小以适合内容。我相信他们现在也有免费版本。

答案 1 :(得分:0)

您可以使用此委托方法

设置每个单元格的高度
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
        {
           NSString *text = [yourArray objectAtIndex:indexPath.row];// here just use your data array which you get from server

           CGSize mTempSize = [text sizeWithFont:[UIFont fontWithName:fontName size:fontSize] constrainedToSize:constrainedToSize lineBreakMode:UILineBreakModeWordWrap];
           return mTempSize.height ;
       }

我希望这可以帮助你...

答案 2 :(得分:0)

首先,您需要根据文本长度设置标签的大小。有许多sizeWithFont方法可用于获取字符串的大小。见Apple Developer Documentation

如果您有单行标签,则可以使用最简单的– sizeWithFont:。但是,如果您有多行标签,则应使用– sizeWithFont:constrainedToSize:。此方法允许您指定标签所需的最大尺寸。

其次,您必须使用tableView:heightForRowAtIndexPath:

返回单元格的计算高度

希望这会对你有所帮助。

答案 3 :(得分:0)

你的tableView:heightForRowAtIndexPath:调用将需要记录缺失的数据以及如何重新布局所有剩余的单元格以填补它留下的空白。所以,你的实际通话在这里是非常重要的。

新的Facebook应用程序在这里做了一个巧妙的技巧,以节省你每次调用它。它在下载之后计算后台中的所有单元格高度,然后在将内容呈现给用户之前,将其与数据本身一起存储在数据存储中。这意味着实际的表格单元格渲染非常快速且光滑,因为您无需在每次应用程序运行/单元重用时重新布局/重新计算单元格高度和布局。

答案 4 :(得分:0)

许多解决方案都是一个相当古老的问题。您可以在此主题中找到其中一个:https://stackoverflow.com/a/7281480/558000