UITableView backgroundColor siempre gris en iPad

128

Cuando configuro backgroundColorpara mi UITableView, funciona bien en 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.

Pasos para reproducir:

  1. Crea un nuevo proyecto basado en la navegación.
  2. Abra RootViewController.xib y establezca el estilo de vista de tabla en "Agrupado".
  3. Agregue este respondedor al RootViewController:

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

¡Gracias por tu ayuda!

rjobidon
fuente
2
Ah, ahora iPhone y iPad se alinearon nuevamente aquí en iOS6 :-)
Gerd
3
¡Bravo por usar los términos poco utilizados "Pasos para reproducir"! :-p
Constantino Tsarouhas

Respuestas:

245

Prueba uno de estos.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
dibujado hacia adelante
fuente
3
¡No sé si hay efectos secundarios pero funciona! ¡Gracias! self.tableView.backgroundView = nil;
rjobidon
30
MUY MUY IMPORTANTE: esto funciona solo con SDK 3.2. Para compatibilidad con versiones anteriores de 3.1.3. y antes debe verificar si la vista de tabla responde a la propiedad backgroundView: if ([self.tableView responde a ToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; de lo contrario, su aplicación se bloqueará y se cerrará abruptamente, ¡puede confiar en mí!
rjobidon
1
Sí, probé la solución anterior y funcionó para mí. ¿Alguien puede decirme cuál es este problema en realidad? ¿Por qué cuando ejecutamos la aplicación, está atenuada?
Naveen
¿Alguien puede decirnos por qué esto es necesario para resolver este problema?
mask8
porque claramente el nuevo ios te permite poner una vista de fondo. ¿Por qué está configurado en una vista gris? Es solo un problema que Apple presentó. Muy extraño, muy tonto. Pero, de nuevo, todos los días me encuentro con algo extraño y tonto mientras codifico para iOS
The Lazy Coder
30

Muchas gracias por esta solución. Apliqué 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
Alejandro
fuente
no hay necesidad de la línea media [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]];
NIKHIL
44
Fuego helado: en realidad lo hay. Sin ella, obtienes extraños artefactos de dibujo en los bordes de las celdas de la tabla.
Hilton Campbell
6

En iPad, la backgroundViewpropiedad parece usarse 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, se debe nileliminar la backgroundViewpropiedad y luego configurarla backgroundColoren 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];
}
Philipp Frischmuth
fuente
Sí, esta verificación debe agregarse para admitir iOS anteriores.
karim
2

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

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

Chico listo
fuente
Estoy viendo este problema para las aplicaciones compiladas con Xcode 6.4 y que se ejecutan en iOS 9.2. Configuré que los colores de fondo de las celdas de vista de tabla (estática) se borraran en Interface Builder, y aparecieron claros en iPhone, pero en iPad eran blancos hasta que configuré los colores de fondo de las celdas para borrar en el -viewDidLoad:método de mi controlador de vista .
Greg
1

Intenté establecer backgroundColor y View para la tabla, no tuve suerte (simulador de iPad Xcode 5 iOS7.1), se veía bien para iPhone, pero el color de fondo gris claro en iPad ...

trabajar con backgroundColor para la celda en sí me arregló 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;

}

cubo108
fuente
0

Si su aplicación está dirigida tanto a iPhone como a iPad, puede hacerlo así:

[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

Observe que la asignación de TableView no tiene liberación automática para ARC.

gmogames
fuente
0

Si está agregando un UIViewController a otro UIViewController, también debe establecer 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];
irmu
fuente
0
  • Simulando iPad 2
  • Ejecutando iOS 7.1 a 8.3
  • Construido a partir de XCode 6.3

Ninguno de los anteriores funcionó para mi UIViewController-> UITableView especificado usando un solo XIB. Lo que funcionó fue mover toda la configuración a un Storyboard, y establecer el color de fondo usando el inspector IB.

QED
fuente
0

También tengo este tipo de problema. El UITableViewcolor de fondo será siempre groupTableViewBackgroundColorsin importar lo que establezca.

El síntoma es similar a este problema: UITableView está restableciendo su color de fondo antes de que aparezca la vista

Después de configurar el color de fondo en la initfunción, es correcto. En viewDidLoady viewWillAppearetapa, es correcto. Sin embargo, en viewDidAppear, el color de fondo se restablece a su color predeterminado.

La respuesta aceptada no funciona ahora.

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

Aquí está mi solución. Simplemente configure el color de fondo de tableView en viewDidLoadfunción en lugar de inito viewWillAppear.

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