UITableView backgroundColor在iPad上始终为灰色

时间:2010-04-22 03:13:21

标签: ipad uitableview iphone-sdk-3.2 background-color

当我为backgroundColor设置UITableView时,它在iPhone(设备和模拟器)上正常工作,但不适用于iPad模拟器。相反,我为我设置的任何颜色(包括groupTableViewBackgroundColor)获得浅灰色背景。

重现的步骤:

  1. 创建一个新的基于导航的项目。
  2. 打开RootViewController.xib并将表格视图样式设置为“Grouped”。
  3. 将此响应者添加到RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. 选择Simulator SDK 3.2,构建并运行。
  5. 您将获得黑色背景(设备和模拟器)。
  6. 在项目树中选择目标。
  7. 点击Project:升级iPad的当前目标。
  8. 构建并运行。
  9. 您将获得浅灰色背景。
  10. 将表格视图样式还原为Plain,您将获得黑色背景。
  11. 感谢您的帮助!

9 个答案:

答案 0 :(得分:245)

尝试其中一种。

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

答案 1 :(得分:30)

非常感谢这个解决方案。 我在UIViewController中使用IBOutlet将它应用于UITableView属性,它的工作原理如下:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent

答案 2 :(得分:6)

在iPad上,backgroundView属性似乎用于为分组表创建灰色背景颜色。因此,要更改iPad上分组表格的背景颜色,应nil backgroundView属性,然后在所需的表格视图上设置backgroundColor

- (void)viewDidLoad
{
    [super viewDidLoad];

    // If you need to support iOS < 3.2, check for the availability of the
    // backgroundView property.
    if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
        self.tableView.backgroundView = nil;
    }
    self.tableView.backgroundColor = [UIColor whiteColor];
}

答案 3 :(得分:2)

我认为值得注意的是,从Xcode 6.1和iOS 8.1开始,特别是对于iPad(如果你想设置单元格背景),你似乎必须设置表格背景和单元格背景。

例如,在iPhone故事板上,您可以设置一个单元格以清除颜色,然后以编程方式为表格设置背景图像,以获得带有背景图像的透明表格。但是,如果您要在iPad上查看相同的配置,则单元格将不清晰。需要将单元格设置为以编程方式清除iPad。

答案 4 :(得分:1)

尝试为表设置backgroundColor和View,没有运气(Xcode 5 iOS7.1 iPad模拟器),iPhone看起来不错,但iPad上的浅灰色背景颜色......

使用backgroundColor为单元格本身在iOS 7.1 4/2014上为我修复了

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"ViewSomeTriggerCell";

        // get a cell or a recycled cell
        sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // put a picture and a word in the cell (positions set in .xib)
        NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
        cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
        cellTrigger.labelName.text = tname;

        // set background color, defeats iPad wierdness
        // http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad

        // clearColor is what I wanted, and it worked, also tested with purpleColor
        cellTrigger.backgroundColor =[UIColor clearColor];
        return cellTrigger;

}

答案 5 :(得分:0)

如果你的应用程序同时针对iPhone和iPad,你可以这样做:

[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
    [myTableView setBackgroundView:nil];
    [myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only

请注意,TableView alloc没有ARC的自动释放功能。

答案 6 :(得分:0)

如果要将UIViewController添加到另一个UIViewController,除了UITableView之外,您还需要将视图的背景设置为clearColor,否则您将获得白色背景而不是浅灰色。

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];

答案 7 :(得分:0)

  • 模拟iPad 2
  • 运行iOS 7.1至8.3
  • 从XCode 6.3构建

以上都不适用于使用单个XIB指定的UIViewController-&gt; UITableView。工作是将整个设置移动到故事板中,并使用IB检查器设置背景颜色。

答案 8 :(得分:0)

我也遇到这种问题。无论我设置了什么,UITableView背景颜色将始终为groupTableViewBackgroundColor

症状类似于此问题-UITableView is resetting its background color before view appears

init函数中设置背景颜色后,它是正确的。在viewDidLoadviewWillAppear阶段,它是正确的。但是,在viewDidAppear中,背景色被重置为其默认颜色。

接受的答案现在不起作用。

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];

这是我的解决方案。 只需在viewDidLoad函数中设置tableView的背景颜色,而不是initviewWillAppear

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}