在UITableViewController代码中将UIView添加到UITableView后面

15

我想在我的iPhone程序中的简单分组表视图中使用固定的图像作为背景。不幸的是,无论我做什么,背景总是纯白色的。我已经按照本站和其他站点上的一些所谓的解决方案进行了尝试,但都没有成功。以下是表格视图控制器类的viewDidLoad方法中相关的代码(注意,为了简单起见,此代码使用了纯蓝色而不是图像):

self.tableView.opaque = NO;
self.tableView.backgroundColor = [UIColor clearColor];
UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
backgroundView.backgroundColor = [UIColor blueColor];
[self.tableView.window addSubview:backgroundView];
[backgroundView release];

我怀疑我的backgroundView视图的位置不正确。我尝试过sendToBack:,bringToFront:和其他方法,但总是只得到一个白色背景。在UITableViewController中是否可以这样做?我必须使用Interface Builder吗?

3个回答

20

使用 UITableViewsubviews 属性将您的背景添加到其中:

[self.tableView addSubview:backgroundView];
[self.tableView sendSubviewToBack:backgroundView];

此外,您的单元格/标题等可能需要设置为透明,以使背景视图可见。


subviews 属性返回一个 NSArray,该对象不响应 -addSubview: 方法。 - Alex Reynolds
好的,问题已经解决。你只需要使用 UIViewaddSubview 方法即可。 - Adam Woś

14

从 iOS 3.2 开始,UITableView有了一个名为 backgroundView 的属性。因此,不要添加任何子视图,只需执行以下操作:

self.tableView.backgroundView = backgroundView;

表视图会负责调整背景视图的大小以适应表格的大小。背景视图不会随着表格单元格移动。换句话说,如果背景视图是一个图像视图,那么图像将似乎锁定在屏幕上,而单元格则在其上滑动。默认的表视图还似乎具有智能功能,如果存在背景视图,则会自动使单元格的适当元素清除。


使用图像设置背景颜色会导致每个单元格行的外部区域出现问题。这个方法非常有效。 - nh32rg
在iOS7/8中,如果我设置了backgroundView,它会覆盖单元格。 - Chris Harrison

3

我会简单地设置UITableView本身的backgroundColor属性。您可以使用UIColor的+colorWithPatternImage:方法将UIImage转换为UIColor(如果不够大,它将在整个视图上重复):

// From within UITableViewController's -viewDidLoad:
UIImage *image = [UIImage imageNamed:"yourImage.png"];
self.tableView.backgroundColor = [UIColor colorWithPatternImage:image];

只需将yourImage.pngyourImage@2x.png添加到您的应用程序包中,适当调整大小,即可完成所有设置。


1
这会导致某些看起来非常奇怪的东西。 - Drew C
似乎只适用于单元格之间的空格。表头、节标题和单元格两侧的空格与图像不匹配。 - Drew C
它将根据可见空间呈现颜色,因此图像看起来“粘”在表的顶部或底部行上。 - leolobato
是的,在iOS 5.x中它已经不能用了。它只能给单元格添加颜色,当你滚动时,颜色就会消失。 - Alex Zavatone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接