UITableView背景颜色未改变。

19
在一个UIViewController模型中,我有以下loadView的实现(所有内容都是通过编程方式创建的):
- (void)loadView {

    // Add Basic View
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 540, 620)];
    myView.backgroundColor = [UIColor clearColor];
    self.view = myView;
    [myView release];

    // Add NavigationBar

    // Add a BG image

    // Add Table
    UITableView *tbView = [[UITableView alloc] initWithFrame:CGRectMake(30, 80, 480, 250) style:UITableViewStyleGrouped];
    tbView.dataSource = self;
    tbView.delegate = self;
    tbView.scrollEnabled = NO;
    tbView.backgroundColor = [UIColor clearColor];
    [tbView reloadData];

    [self.view addSubview:tbView];
    [tbView release];

    // some more code
}

正如您所看到的,我将backgroundColor设置为clearColor,但是当我编译和运行代码时,我总是在表格后面看到灰色背景: “enter

我不明白我做错了什么(听起来很愚蠢,我知道),我曾经有过完全相同的代码,它可以完美地工作。 我正在使用iOS SDK 4.2.1进行编译。


你不应该在 loadView 中进行所有这些设置,而应该在 viewDidLoad 中进行。在 loadView 中,你应该只是创建视图,而不是设置颜色等。在 loadView 中将框架设置为 CGRectZero 是可以的。你可以在 viewDidLoad 中稍后更改它。 - Robotbugs
4个回答

45

在最近的 iOS 版本(3.2及以上),你还需要将 UITableView 的 backgroundView 属性设置为 nil。

因此,添加...

tbView.backgroundView = nil;

...应该解决你的问题。

话虽如此,如果要与3.2及其之前版本的设备兼容,应在调用它之前使用instancesRespondToSelector方法检查其是否存在。


那个可行,谢谢!不过我不太明白他们为什么要添加这个视图,如果只是将UITableView作为任何自定义视图的子视图添加,会有什么区别呢? - Robin
@Robin 我想如果UITableView实际上是您的顶级视图,那么这就是一个更清晰的路径,但基本上就是这样。 - John Parker
直到最近我才需要这样做感觉很奇怪。+1 - James

14

请确保您设置了以下 3 个选项:

tbView.opaque = NO;
tbView.backgroundColor = [UIColor clearColor];
tbView.backgroundView  = nil;

3
这对我有用,但我必须将代码放在“viewWillAppear”中。如果我把它放在“viewDidLoad”中,它就不起作用。 - Guruniverse
@Guruniverse 那个回复解决了我一个多小时的搜索问题。谢谢! - kmell96

3

尝试

tbView.backgroundView = nil;

1

我尝试从故事板中进行更改。 在此之前,它能够正常工作。

tbView.backgroundColor = .white

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