UITableView背景为平铺图像

时间:2012-09-26 22:50:58

标签: iphone objective-c ios uitableview

我的iPhone上的图像高度约为1,5。我想把它作为UITableView的连续背景。它必须滚动表。有没有办法做到这一点?

6 个答案:

答案 0 :(得分:6)

您可以将此图像转换为一种模式,然后可以无限重复该模式作为表格视图的背景。首先,这样做:

UIColor *backgroundPatternColor = [UIColor colorWithPatternImage:myImage];

然后将表格视图或任何其他视图的背景颜色设置为backgroundPatternColor

答案 1 :(得分:2)

有简单的解决方案。

使用此代码为表格视图设置背景图案图像(图案图像可能是小图像,您想要平铺):

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"back"]];
}

平铺图像将向上和向下无限平铺,并使用tableView滚动。

然后做下一个重要的技巧 - 为单元格设置透明背景颜色,因为设置tableView backgroundColor也会将平铺背景设置为单元格:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor clearColor];
}

将此方法用于简单的tableView单元格,否则复杂单元格的透明背景会导致性能不足。

答案 2 :(得分:1)

表格视图滚动很大程度上是一种错觉,因为当用户滑动/滚动表单元格时,当不使用时,表格单元格会排队并且当再次需要新单元格时将其出列。我们经常将此称为跑步机效果,您在屏幕上看到的就像跑步机的腰带。它仅存在于视口中,并且实际上不会滚动得更远,尽管它看起来不然。这意味着您的表格视图的背景图片将固定,而不是滚动您的单元格。

我认为,在您的单元格中滚动图像的唯一方法就是将图像分割成单元格的大小,并将每个单元格的背景设置为该索引路径的图像

所以说你有一个像这样的表视图:

         CELLS            INDEX PATH
|----------------------|
|          |           |  0, 0
|----------------------|
|        /   \         |  0, 1
|----------------------|
|      YOUR IMAGE      |  0, 2
|----------------------|
|        HERE          |  0, 3
|----------------------|
|        \   /         |  0, 4
|----------------------|

将图像预先切割成相同尺寸的部分,这些部分是您细胞的正确高度。然后,您可以在cellForRowAtIndexPath中抓取索引路径的行,并根据该行设置单元格的背景图像。如果您的图像高度超过图像高度,则最终可能会耗尽图像。但是,这很容易检查。

如果您将图像命名为background_0.png,background_1.png等,则可以像这样获取所需的图像:

UIImage *imageForCell = [UIImage imageNamed:[NSString stringWithFormat:@"background_%d", [indexPath row]]];
[[cell backgroundImageView] setImage:imageForCell];

backgroundImageView是您添加到自定义单元格的图片视图。

答案 3 :(得分:1)

您要求为您的桌子铺设平铺的滚动背景。通常用于在tile中滚动的东西的UI是一个表。因此,请使用表格作为背景:)

您需要两个表:backgroundTableView和contentTableView。 contentTableView是您需要的,但请确保将单元格和表格的背景颜色和视图设置为clear / nil。

backgroundTableView包含您的平铺图像:也就是说,每个单元格应该是平铺图像的高度,并且应该包含平铺图像。

然后滚动contentTableView时,更新backgroundTableView的contentOffset以匹配:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (scrollView == self.contentTableView) {
        self.backgroundTableView.contentOffset = self.contentTableView.contentOffset;
    }
}

确保将控制器设置为两个表的dataSource和委托。另外,请确保backgroundTableView中有足够的“内容”(行数*高度),它可以继续滚动,直到至少在contentTableView的末尾。

Aaaaaand完成了!

答案 4 :(得分:0)

UITableView继承自UIScrollView。我建议您将图像添加为UITableView层次结构的自定义子视图。

UIImageView *imageView = [UIImageView alloc] initWithImage:myImage];
[self.tableView insertSubview:imageView atIndex:0];

现在,您可能需要继承UITableView并提供自己的

实现
    - (void)layoutSubviews
{
    [super layoutSubviews];
    [self sendSubviewToBack:myImageView];
}

我刚把这个代码从头顶拉出来,所以你可能需要摆弄它。

答案 5 :(得分:-1)

您可以将图片设置为桌子的背景视图。

self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YOUR_BACKGROUND_IMAGE"]];