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.
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. :)
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.
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];
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()
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];
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.
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).
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;
}
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:
Esto parece funcionar bien. Ninguno de los cambios de código anteriores son necesarios,tampoco this esta es una solución IB pura.
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:
- 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).
-
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
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.
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í.
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
}
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
- Establecer azul como el estilo de selección y
-
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 }
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];
}
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