2010-04-22 16 views
128

Cuando configuro el backgroundColor para mi UITableView funciona bien en el iPhone (dispositivo y simulador) pero NO en el simulador de iPad. En cambio, obtengo un fondo gris claro para cualquier color que establezca, incluido groupTableViewBackgroundColor.UITableView backgroundColor siempre gris en el iPad

Pasos para reproducir:

  1. Crear un nuevo proyecto basado en la navegación.
  2. Abra RootViewController.xib y establezca el estilo de vista de tabla en "Agrupado".
  3. Añadir esta respuesta a la RootViewController:

    - (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor blackColor]; 
    }
  4. Seleccione Simulador SDK 3.2, crear y ejecutar.
  5. Obtendrá un fondo negro (dispositivo y simulador).
  6. Seleccione su objetivo en el árbol del proyecto.
  7. Haga clic en Proyecto: actualizar objetivo actual para iPad.
  8. Compilar y ejecutar.
  9. Obtendrá un fondo gris claro.
  10. Revierte el estilo de vista de tabla a Normal y obtendrás un fondo negro.

Gracias por su ayuda!

+2

Ah, ahora el iPhone y el iPad se alinearon de nuevo aquí en iOS6 :-) – Gerd

+3

¡Bravo por utilizar los términos poco comunes "Pasos para reproducir"! :-p –

Respuesta

245

Pruebe uno de estos.

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

No sé si hay efectos secundarios pero funciona. ¡Gracias! self.tableView.backgroundView = nil; – rjobidon

+1

¡Wow funciona! ¿Por qué es esto? –

+30

MUY MUY IMPORTANTE: Esto funciona solo con SDK 3.2. Por compatibilidad con versiones anteriores con 3.1.3. y antes debe verificar si la vista de tabla responde a la propiedad backgroundView: if ([self.tableView respondsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; de lo contrario, tu aplicación se bloqueará y saldrá abruptamente, ¡puedes confiar en mí! – rjobidon

30

Muchas gracias por esta solución. que aplica esto en una propiedad UITableView con IBOutlet en un UIViewController y funciona bien como:

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

no hay necesidad de la línea central [panelTable setBackgroundView: [[[UIView alloc] init] liberación automática]]; – NIKHIL

+4

Freezing Fire: en realidad existe. Sin él, obtienes extraños artefactos de dibujo en los bordes de la celda de la tabla. –

6

En el iPad backgroundView la propiedad parece ser utilizado para crear el color de fondo gris para las tablas agrupadas. Por lo tanto, para cambiar el color de fondo de las tablas agrupadas en iPad, debe nil salir de la propiedad backgroundView y luego establecer backgroundColor en la vista de tabla deseada.

- (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]; 
} 
+0

Sí, esta comprobación se debe agregar para admitir iOSes anteriores. – karim

0

Si sus objetivos de aplicaciones iPhone y iPad que puede hacer de esta manera:

[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 

aviso de que el alloc TableView no tiene autorelease de ARC.

0

Si agrega un UIViewController a otro UIViewController, también debe configurar el fondo de su vista en clearColor además de UITableView o de lo contrario obtendrá un fondo blanco en lugar de gris claro.

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

intentado fijar backgroundColor y Vista de la mesa, no tuvo suerte (Xcode 5 iOS7.1 simulador de IPAD), parecía estar bien para el iPhone, pero la luz de color gris de fondo en el iPad ...

trabajar con backgroundColor para la célula misma solucionó esto en 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; 

}

2

Creo que vale la pena señalar que a partir de Xcode 6.1 y iOS 8.1, específicamente para el iPad (si desea establecer fondo de la celda también) parece que se debe establecer el fondo de la mesa Y el fondo de la celda.

Por ejemplo, en un guión gráfico de iPhone puede establecer una celda para borrar el color, luego establecer la imagen de fondo de la tabla mediante programación para una tabla transparente con la imagen de fondo. Sin embargo, si tuviera que ver esta misma configuración en el iPad, las celdas no estarían claras. Las celdas deberán configurarse para borrarse programáticamente para iPad.

+0

Veo este problema para las aplicaciones compiladas con Xcode 6.4 y que se ejecutan en iOS 9.2. Configuré los colores de fondo de las celdas de mi vista (estática) para despejarlos en Interface Builder, y aparecieron claros en iPhone, pero en iPad eran blancos hasta que establecí los colores de fondo de las celdas para que desaparecieran en '' viewDidLoad: ' método. – Greg

0
  • Simulación del iPad 2
  • con iOS 7.1 a 8.3
  • Construido a partir de XCode 6,3

Ninguna de las anteriores trabajaron para mi UIViewController-> UITableView especifica usando una sola XI ter. Lo que sí funcionó fue mover toda la configuración a un guión gráfico y establecer el color de fondo con el inspector de IB.

Cuestiones relacionadas