UITableViewCell muestra fondo blanco y no se puede modificar en iOS7


He implementado una clase de celda de vista de tabla personalizada que hereda de UITableViewCell. La vista de tabla contiene una imagen de fondo, por lo que quiero que el fondo de la celda sea transparente. Se ve muy bien antes de iOS7.

Sin embargo, en iOS7, la celda siempre se muestra con un fondo blanco.


Incluso para Xcode7, 2015, hay un error en storyboard: debe establecer el color de fondo de una celda en el código.

Author: Fattie, 2013-09-18

14 answers

Como dijo Apple DOC ( Referencia de clase UITableViewCell):

... En iOS 7, las celdas tienen un fondo blanco de forma predeterminada; en versiones anteriores de iOS, las celdas heredan el color de fondo de la vista de tabla que encierra. Si desea cambiar el color de fondo de una celda, hágalo en el Vista de la tabla: willMisplayCell: forRowAtIndexPath: método del delegado de la vista de tabla.

Así que para mi caso que para mostrar las celdas con fondo transparente, solo necesita implementar el método delegado en el controlador de vista de tabla como se muestra a continuación:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
  [cell setBackgroundColor:[UIColor clearColor]];
}

Solo nota: Como @ null dijo, "...parece que hay un error en interface builder...", No estoy totalmente seguro de si tiene el error, pero parece tan causa su comentario consiguió varios votos. Así que podría haber algo mal si utilizas IB. :)

 382
Author: Kjuly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-18 01:20:47

Lo investigué un poco y descubrí que el color de fondo de la celda es establecido por el sistema de apariencia. Entonces, si todas las celdas de su aplicación tienen un fondo claro, la solución más fácil sería:

[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];

E incluso si tienen un fondo diferente, el color claro parece ser el más conveniente como el predeterminado.

 64
Author: Anton Filimonov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-16 17:11:54

Escriba esto en su método cellForRowAtIndexPath antes de devolver la celda;

cell.backgroundColor = [UIColor clearColor];
 28
Author: sanjana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-18 19:48:00

En realidad encontré que el problema surgió porque el color de fondo de UITableView no estaba configurado para borrar. Si cambia el color de fondo de UITableViewCell a clear y encuentra que todavía ve blanco, asegúrese de que el color de fondo de UITableView esté establecido en clear (o lo que quiera).

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

En Swift

tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()
 13
Author: Endama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-21 09:17:20

El color de fondo predeterminado de un UITableViewCell en iOS 7 es blanco.

Tienes que establecer la propiedad backgroundColor en algún lugar de tu código. Por ejemplo, configúrelo después de crear la celda de nuevo.

cell.backgroundColor = [UIColor clearColor];
 12
Author: Yiming Tang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-24 09:44:53

Esto es definitivamente un error de iOS. En iOS 8, establecer el color de fondo en Interface Builder funciona bien para iPhone, pero en iPad siempre es whiteColor. Para arreglarlo, en el mensaje de origen de datos cellForIndexPath, poniendo esto en:

cell.backgroundColor = cell.backgroundColor

Y funcionará. Esto es exactamente por lo que dije que es un error ya que el código en sí es más o menos bullsh*t, pero funciona.

 10
Author: superarts.org,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-19 04:24:41

Podría ser que tu UITableViewCell esté seleccionada por defecto.. Puede confirmar esto usando Xcode 6s new visual debugger (o averiguar exactamente qué vista está causando que aparezca esta celda blanca).

introduzca la descripción de la imagen aquí

Curiosamente, después de saber esto.. establecer el color de fondo de la celda seleccionada para borrar todavía no funcionó.. haciendo un poco más de investigación, resulta que solo tuve que modificar el estilo de selección cuando estoy creando esta celda personalizada:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // do customization here
    }
    self.selectionStyle = UITableViewCellSelectionStyleNone;
    [self setBackgroundColor:[UIColor clearColor]];
    return self;
}
 4
Author: abbood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-31 10:57:17

Encontré que ninguno de los anteriores funcionaba desde XCode 5.1.1, iOS 7.1.

Si está utilizando el Creador de interfaces con celdas prototipo, seleccione la celda prototipo y, a continuación, en el selector de atributos de la sección Vista, cambie el formulario de fondo predeterminado a Color claro:

introduzca la descripción de la imagen aquí

Esto parece funcionar bien. Ninguno de los cambios de código anteriores son necesarios,tampoco this esta es una solución IB pura.

 3
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-18 20:13:53

La respuesta aceptada no solucionó el problema para mí. Tuve que hacer esto:

  1. En el creador de interfaces, seleccione la vista de tabla. Luego, desde el inspector de atributos, desde la sección View, establezca el Fondo en transparente (0% de opacidad).

introduzca la descripción de la imagen aquí

  1. Del método cellForRowAtIndexPath de la clase de fuente de datos de la tabla:

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier];
    cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
    
 2
Author: RajV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-28 16:36:29

Para mí cell.backgroundColor = cell.contentView.backgroundColor; ya sea en tableView:willDisplayCell:forRowAtIndexPath: o tableView:cell:forRowAtIndexPath: hizo el trabajo.

Esto se debe a que configuré el color de fondo de contentView en Interface Builder como desee.

 2
Author: mllm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-02 13:01:55

Al agregar objetos de interfaz de usuario a una celda, Xcode 5/IOS 7 agrega una nueva "Vista de contenido" que será la vista superior de todos los elementos de la celda. Para establecer el color de fondo de la celda, establezca el color de fondo de esta vista de contenido. Las soluciones anteriores no funcionaron para mí, pero esta funcionó bien para mí.

 1
Author: DrBug,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-12 14:13:39

Solución Swift 1.2:

Simplemente agregue una definición explícita para el color de fondo de su celda como entonces:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // Configure the cell...
    cell.backgroundColor = UIColor.clearColor()

    return cell
}
 1
Author: Dan Beaulieu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-12 23:49:31

Tenía un problema similar, tenía que

  1. Establecer azul como el estilo de selección y
  2. Añadir esto al código para corregirlo

    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    
      var bgColorView: UIView = UIView()
      bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
      bgColorView.layer.masksToBounds = true
      tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
      return true
    }
    
 1
Author: Nakul Sudhakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-29 10:35:45

También puede usar código de color para hacer que su celda UITableView sea lucrativa.

[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];

Este es el código para aplicar el método de código de color:

-(UIColor*)colorWithHexString:(NSString*)hex
{
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];


    if ([cString length] < 6) return [UIColor grayColor];

    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

    if ([cString length] != 6) return  [UIColor grayColor];

    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];

    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f)
                         green:((float) g / 255.0f)
                          blue:((float) b / 255.0f)
                         alpha:1.0f];
}
 0
Author: MahboobiOSDeveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-17 10:37:37