UITableView backgroundColor在iPad上始终为灰色


128

当我backgroundColor为自己设置时,UITableView它可以在iPhone(设备和模拟器)上正常运行,但不能在iPad模拟器上运行。相反,我设置的任何颜色(包括)都会得到浅灰色背景groupTableViewBackgroundColor

重现步骤:

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

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. 选择Simulator SDK 3.2,生成并运行。
  5. 您将获得黑色背景(设备和模拟器)。
  6. 在项目树中选择目标。
  7. 单击项目:为iPad升级当前目标。
  8. 构建并运行。
  9. 您将获得浅灰色背景。
  10. 将表视图样式还原为“普通”,您将得到黑色背景。

谢谢你的帮助!


2
嗯,现在iPhone和iPad再次在iOS6中对齐:-)
Gerd

3
Bravo使用了很少使用的术语“复制步骤”!:-p
君士坦丁堡撒

Answers:


245

尝试其中之一。

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

3
我不知道是否有副作用,但是可以!谢谢!self.tableView.backgroundView = nil;
rjobidon

30
非常非常重要:这仅适用于SDK 3.2。与3.1.3向后兼容。并且更早之前,您必须检查表视图是否对backgroundView属性作出响应:否则,您的应用程序将崩溃并突然退出,您可以信任我!
rjobidon 2010年

1
是的,我尝试了上述解决方案,它对我有用。谁能告诉我这到底是什么问题。为什么当我们运行该应用程序时,它变灰了?
Naveen

请有人告诉我们为什么要解决这个问题?
mask8 2012年

因为很明显,新的ios可以让您放置背景视图。为什么将其设置为灰色视图仅仅是Apple提出的一个问题。非常奇怪,非常愚蠢。但是话又说回来,每天我在为iOS编码时遇到一些奇怪的事情
The Lazy Coder 2012年

30

非常感谢您提供此解决方案。我在UIViewController中的IBOutlet上将其应用于UITableView属性,它的工作原理如下:

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

中间没有任何必要[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
NIKHIL

4
冰冻之火:确实存在。没有它,您将在表格单元格边界中得到奇怪的绘图伪像。
坎贝尔希尔顿酒店,

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];
}

是的,应该添加此检查以支持早期的iOS。
karim

2

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

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


对于使用Xcode 6.4构建并在iOS 9.2上运行的应用程序,我看到了这个问题。我在Interface Builder中设置了要清除的(静态)表格视图单元格的背景色,在iPhone上它们看起来很清晰,但是在iPad上,它们是白色的,直到我在视图控制器的-viewDidLoad:方法中设置了单元格的背景色。
格雷格,

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;

}


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分配没有针对ARC的自动发布。


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];

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

以上都不适用于使用单个XIB指定的UIViewController-> UITableView。所做的工作是将整个设置移到情节提要中,并使用IB检查器设置背景色。


0

我也遇到这种问题。将UITableView背景颜色将永远groupTableViewBackgroundColor无论我设置什么。

症状就是这个问题- -UITableView在视图出现之前重置其背景颜色

init功能中设置背景色后,它是正确的。在viewDidLoadviewWillAppear舞台,它是正确的。但是,在viewDidAppear,背景色被重置为其默认颜色。

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

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

这是我的解决方案。只需在viewDidLoad函数中设置tableView的背景色,而不是init或即可viewWillAppear

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.