如何将 UITableView 的背景设置为图像?

Posted

技术标签:

【中文标题】如何将 UITableView 的背景设置为图像?【英文标题】:How to set the background of a UITableView to an image? 【发布时间】:2009-10-21 17:48:55 【问题描述】:

我正在使用上传表格的 UITableViewController。我有一个带有 UITableView 的 Nib 文件。现在我想从界面生成器或从 TableViewController 将 tableView 的背景设置为图像。

如何做到这一点。

好的,所以我在控制器中创建了一个 UIImage。现在当我添加时,我需要在哪里添加它。

当我尝试添加它并将 tableView 的颜色设置为 clearColor 时,它只显示图像而不是表格,尽管我确保将图像发送到所有视图的后面。

伙计们请注意,我不是在处理 UIView 并将 tableView 添加为其子视图,而是在处理 UITableView。

【问题讨论】:

【参考方案1】:

在 UITableView 后面放置一个 UIImageView,然后这样做:

tableView.backgroundColor = [UIColor clearColor];

【讨论】:

还要确保您使用的 UITableViewCells(以及它们的子视图)具有透明背景。【参考方案2】:

不知何故,我找到了一条路。

self.tableView.backgroundColor = [UIColor clearColor];

self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithData:imageData]];

【讨论】:

这很好用。请注意,如果文件中的图像没有视图那么大,它将被平铺,因此如果您的图像重复,您可以大大减小图像大小。 访问 parentViewController.view 是一个糟糕的想法——你不知道它有什么样的支持,而且这是对封装的严重违反。即使它现在可以工作,下一次 ios 更新也可能完全破坏你的代码。不要这样做。【参考方案3】:

self.tableView.backgroundColor = [UIColor clearColor];

self.parentViewController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"parentViewBackground.png"]];

图片大小应为 2x - 640*960 1x - 320*480

小于上面的尺寸,会被平铺。

【讨论】:

我在UITableView 后面添加了一个UIImageView,并在viewDidLoad 中设置backgroundColor 以清除。效果很好!谢谢你 damithH【参考方案4】:

rkbang 概述的backgroundColor = [UIColor colorWithPatternImage: image] 方法效果很好。这是另一种通过向 parentViewController 添加新视图来实现相同效果的方法。如果您想屏蔽 parentViewController 可能具有的其他内容,这将很有用。

在您的 UITableViewController 子类中,在 -viewDidLoad 中插入:

//make a cool background image
self.tableView.backgroundColor = [UIColor clearColor];
UIImage *patternImage = [UIImage imageNamed:@"backgroundImage.png"];
UIImageView * backgroundImageView = [[UIImageView alloc] initWithImage:patternImage];

[self.parentViewController.view addSubview:backgroundImageView];
[self.parentViewController.view sendSubviewToBack:backgroundImageView];
//release the background image and image view (the backgroundImageView is still retained by the parentViewController)
[patternImage release];
[backgroundImageView release];

您可能希望跟踪 backgroundImageView,以便您可以删除或替换它。上面的代码示例将其留给 parentViewController 来管理新视图。如果您正在加载和卸载此 UITableView,那么每次加载都会泄漏这些 UIImageView,除非 parentViewController 以某种方式以相同的速率释放它们。

【讨论】:

【参考方案5】:

您可以做的是将 tableview 的 backgroundColor 属性设置为 [UIColor clearColor] 并在 TableView 下方有一个相同大小和位置的 UIImageView 以显示您的背景。

【讨论】:

【参考方案6】:

TableView 属性包括背景颜色。将此设置为 clearColor;并将图像放在它后面。 (在 IB 中,我认为您必须删除 tableview 添加图像,然后再次添加您的 tableview)

如果您将 UITableViewController 子类化,您将免费获得一个 tableview,不需要 ivar 或 nib,但是由于您使用的是背景,所以我会坚持使用 IB。

【讨论】:

【参考方案7】:

您可以使用表格视图的背景视图。这对我有用。

[self.tableView setBackgroundView: [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"????.png"]]];

??????.png 是您的背景图片。

【讨论】:

以上是关于如何将 UITableView 的背景设置为图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UITableView 背景图像的大小?

UITableView - 背景图像大小和位置问题

UITableView 背景图片

uitableview 单元格背景的问题

UITableView - 带有背景图像的 UIRefreshControl

使用图像作为 UITableView 背景;背景仍然显示黑色