0

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

例如:内容打印如下:标题地址邮编电话...

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

邮编电话...

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

4

4 回答 4

2

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

于 2012-12-11T22:59:32.707 回答
0

您的 tableView:heightForRowAtIndexPath: 调用将需要考虑丢失的数据以及单元格的所有其余部分将如何重新布局以缩小它留下的差距。因此,您的实际通话在这里将很重要。

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

于 2012-12-11T13:41:02.580 回答
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 ;
       }

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

于 2012-12-11T13:22:46.990 回答
0

首先,您需要根据其文本长度设置标签的大小。有许多sizeWithFont方法可用于获取字符串的大小。请参阅Apple 开发人员文档

如果您有单行标签,您可以使用其中最简单的标签– sizeWithFont:。但如果你有多行标签,你应该使用– sizeWithFont:constrainedToSize:. 此方法可让您指定标签的最大尺寸。

其次,您必须使用为您的单元格返回计算出的高度tableView:heightForRowAtIndexPath:

希望这对您有所帮助。

于 2012-12-11T13:36:07.050 回答