在数组 xcode 中并排的图像(在 UITableViewCell 中)
Posted
技术标签:
【中文标题】在数组 xcode 中并排的图像(在 UITableViewCell 中)【英文标题】:Images side by side in an array xcode (in UITableViewCell) 【发布时间】:2011-10-31 16:43:14 【问题描述】:我有一组图像(最多 25 个)需要并排显示(它们是访问图标,告诉您一个位置有哪些设施)
我有一个数组中的图像,并在 UITableViewCell 中使用 UIImageView。 (在尝试阵列之前,我正在练习静态图像)。但是,它们相互重叠。有没有办法将图像强制到前一个图像的右侧,而无需每次都计算出右侧的填充 +60 像素:
if (indexPath.section == 0)
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierImage];
// I am assuming this image never changes and there is one row in this section! If it does change, use viewWithTag to get hold of the image view.
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifierImage] autorelease];
UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)]autorelease];
imageView.tag = 1;
imageView.image = [UIImage imageNamed:@"prem.jpg"];
[cell addSubview:imageView];
UIImageView *imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(60,0,50,50)]autorelease];
imageView2.tag = 2;
imageView2.image = [UIImage imageNamed:@"prem.jpg"];
[cell addSubview:imageView2];
return cell;
上面的方法适用于两张图片,但它不是很优雅,而且超过 25 张潜在图片看起来很愚蠢(每次图片数量也会发生变化)。
任何提示将不胜感激。
汤姆
【问题讨论】:
我会放弃表格视图并使用 UIScrollView.. 我会的,但表格中已经有更多信息,我显然需要根据权力使用表格! 我会创建一个 UITableViewCell 子类,它有一个方法 append image,它可以在内部负责将图像布置在正确的位置,这样你就不必担心你的表格视图视图控制器,这是假设您没有重用单元格,尽管您在重用单元格之上使用它的方式,您可能会在错误的单元格中获得图像.. 【参考方案1】:为什么不使用 UIScrollView?如果我需要并排放置图像,我只需在 UIScrollView 上执行此操作。代码看起来像这样
//Let's say your UIScrollView is named 'scrollView' and the array containing your UIImages is called 'imageArray'
CGFloat contentWidth = 0;
for(UIImage *thisImage in imageArray)
UIImageView *thisImageView = [[UIImageView alloc] initWithFrame:CGRectMake([imageArray indexOfObject:thisImage]*(thisImage.size.width + PADDING_IF_ANY), 0, thisImage.size.width, thisImage.size.height)];
[scrollView addSubview:thisImageView];
[thisImageView release];
contentWidth += thisImage.size.width + ([imageArray indexOfObject:thisImage]==0)?0:PADDING_IF_ANY;
scrollView.contentSize = CGSizeMake(contentWidth, scrollView.frame.size.height);
代码说明:
PADDING_IF_ANY 表示您想要的两个图像之间的像素填充。代码只是一个 for 循环,循环遍历你的 UIImage 数组,为每个图像分配一个 UIImageView,并根据数组中 UIImage 的索引位置设置 X 原点。
因此,索引位置 0 将放置在滚动视图的最左侧位置。索引位置 1 将放置在 1*(image width + padding) 处,即滚动视图中前一个图像的右侧,依此类推。
要在 UITableViewCell 中使用滚动视图,请在 cellForRowAtIndexPath 中执行以下操作:
//This line gets you the frame of the cell relative to the tableview.
CGRect cellFrame = [tableView rectForRowAtIndexPath:indexPath];
//Set the Y origin to 0. This will get you the frame for the scrollView to be added with to the cell.
cellFrame.origin.y = 0;
//Now add your scrollView
scrollView = [[UIScrollView alloc] initWithFrame:cellFrame];
/*
Do stuff
*/
[cell.contentView addSubview:scrollView];
[scrollView release];
【讨论】:
我可以在单元格中使用滚动视图吗? 是否需要自定义单元格视图,或者我可以在 cellforrowatindexpath 中随意执行此操作 嗨,Thakns,我相信它会有所帮助,当我得到它的工作时我会标记它!我可以问一个简单的问题吗?如果我将 UIScrollView 添加到我的 xib 文件以使用它,我是否必须将它放在桌子上,或者它会自动将其移动到 xib 上。还是我必须以某种方式以编程方式添加滚动视图? 老实说,我不使用 IB,所以我不确定。但为了做出有根据的猜测,我会说,以编程方式进行。我在答案中发布的代码应该会有所帮助...【参考方案2】:根据 ivar 整数值创建矩形并将其放入 for 循环中,每次循环都会增加 xpos ivar。
【讨论】:
【参考方案3】:使用带有 CGTransform 的水平表视图,如下所示: http://iosstuff.wordpress.com/2011/06/29/creating-pulse-style-scrolling-horizontally-scrolling-uitableview-as-a-subview-of-uitableviewcell/
【讨论】:
【参考方案4】:我认为你需要改变这一行
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
我知道这可能会增加内存,但没有其他解决方案,或者只是使用滚动视图。
【讨论】:
以上是关于在数组 xcode 中并排的图像(在 UITableViewCell 中)的主要内容,如果未能解决你的问题,请参考以下文章