在数组 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 中)的主要内容,如果未能解决你的问题,请参考以下文章

现在在 Xcode 中禁用了允许并排查看两个文件的按钮

Xcode 并排代码比较选项在哪里?

XCode 5 和 XCode 5.1 并排

并排安装 xcode 4.4 和 xcode 4.5?

如何在 PHP 中并排绘制翻转图像和原始图像?

如何在 GitHub README.md 中并排显示图像?