将动态高度UITableView添加到滚动视图中?

问题描述:

大家好 - 我正在进入iPhone开发阶段,并且遇到了我第一个令人困惑的用户界面问题。这里的情况:将动态高度UITableView添加到滚动视图中?

我的应用程序选项卡为基础的,而且我感到困惑的观点在顶部的静态特色内容的图像,然后在下面的动态列表成X头条被加载。我的目标是让标题表的高度随着元素的添加而增长,然后让整个视图滚动(在下面的顶部和标题列表中都有精选图片)。所以,我想我的问题有两个部分:

1)首先,你怎么设置为细胞添加到它,这将增加一个动态高度的表视图。到目前为止,我只能让我的表格处理自己的滚动。

2)那么,什么是根NIB认为,功能的图像和表格应该生活在以启用滚动?我已经把过大的内容放到了UIScrollView中,尽管它自动滚动似乎取得了成功。

在此先感谢您对此主题的任何帮助!

到第一种:

正如我理解你的处境: 您想将图像添加到UITableView的顶部和图像应与UITableView的滚动,不应该?

UITabeView有一个名为tableHeaderView的属性。这只是一个视图,所以你可以设置一个UIImageView。

(我有在当前时间没有Xcode中,您需要编辑的代码)

UIImage *image = [UIImage imageNamed:@"myCoolPic.png"]; 

UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

imageView.frame =CGRectMake(0,0,width,height); 

tableView.tableHeaderView = imageView; 

[imageView release]; 
+0

UITableView是一个UIScrollView,它们不能很好地嵌套。使用tableHeaderView是正确的方法。 – drawnonward 2010-05-21 00:02:06

什么你问的可能是可行的与接口生成器(或不,我不知道),但我知道代码的方式来做到这一点。

改变这一切,你做的是设置的UITableView对象的框架桌子的高度。 UITableViewCell的默认高度是44我相信,所以根据你有多少个单元格来设置它的倍数。当然你的单元格可以是任何高度,所以你需要跟踪你在heightForRowAtIndexPath中报告的内容并相应地设置表格框架。

的UITableView肯定会生活在一个UIScrollView和两个组件可以滚动。表格视图需要成为滚动视图的子视图,图像也是如此。然后,如果您直接拖动表格,或者如果拖动图像或滚动视图,则滚动滚动视图。

对于第一个问题,我对你问的方式有点糊涂了:“你怎么设置为细胞添加到它,这将增加一个动态高度的表视图”。表格视图有一个函数,它在表格完全载入称为“numberOfRowsInSection”的数据之前调用它。因此,单元格的数量基于该函数,如果您更新用​​于确定该函数返回值的变量(通常是[myArray count]),它应该自动为整个表找到合适的大小。

然而,可变高度细胞的东西,我发现有点棘手,我一直在使用它解决了以下:

有一些,你可能会发现有用的UIKit NSString的补充。

http://developer.apple.com/iphone/library/documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html

特别的sizeWithFont:功能。

表视图还有一个'heightForRowAtIndexPath:'函数,它被称为'numberOfRowsInSection'的次数。每次调用都会确定索引路径处单元格的高度。

因此,举例来说:(假设myArray的是NSString的数组)

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return [[myArray objectAtIndex:indexPath.row] sizeWithFont:myFont];} 

这将返回基于关闭你的实际数据,一块一块的高度。还有其他函数可以指定文本如何包装和截断等。

它不觉得是一个很好的解决方案,因为你最终获取数据两次,一次确定高度,然后再次在'cellForRowAtIndexPath:'中配置单元时,它确实可行!

我在过去的几个星期里学到了很多东西,并且经历了几次解决这个问题的迭代。我的第一个解决方案是手动测量表格高度,然后将表格矩形设置为在该高度显示,最后将scrollView的内容设置为包含表格和顶部特征。那个解决方案基本上起作用了,当用不同的工具栏配置分支到新视图时,我开始遇到一些显示问题。看起来我的手动框架大小正在干扰iPhone的原生内容缩放。

因此,我放弃了手动调整大小,而只是将该顶部功能块作为自定义表格单元格,该单元格显示在表格顶部的自己的部分中。我做了一个硬逻辑定义,第0节只有一个表格单元格,并且该单元格是我通过Interface Builder链接的自定义布局。然后,我能够摆脱所有混乱的定制缩放逻辑,整个系统更清洁,更流畅,并且工作可靠。