guide - ios frameworks
UITableViewCell muestra fondo blanco y no se puede modificar en iOS7 (14)
Al agregar objetos UI a una celda, Xcode 5 / IOS 7 agrega una nueva "Vista de contenido" que será la super visión de todos los elementos en 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í.
Implementé 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 el guión gráfico : debe establecer el color de fondo de una celda en el código.
Como dijo Apple DOC ( UITableViewCell Class Reference ):
... En iOS 7, las celdas tienen un fondo blanco por defecto ; en versiones anteriores de iOS, las celdas heredan el color de fondo de la vista de tabla adjunta. Si desea cambiar el color de fondo de una celda, hágalo en el método tableView: willDisplayCell: forRowAtIndexPath: de su delegado de la vista de tabla.
Entonces, para mi caso, para mostrar celdas con fondo transparente, solo necesito implementar el método de 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]];
}
Nota : como dijo @null, "... parece que hay un error en el constructor de interfaces ..." , no estoy totalmente seguro de si tiene el error, pero parece que sí porque su comentario obtuvo varios votos. Entonces podría haber algo mal si usa IB. :)
De hecho, descubrí que el problema surgía del color de fondo de UITableView que no se configuraba para borrar. Si cambia el color de fondo de UITableViewCell para borrar y observa que aún ve blanco, asegúrese de que el color de fondo de UITableView esté configurado para borrar (o lo que desee).
[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];
En Swift
tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()
Descubrí que ninguno de los anteriores funcionaba desde XCode 5.1.1, iOS 7.1.
Si está utilizando el Generador de interfaces con celdas de prototipos, seleccione la celda del prototipo, luego, desde el selector de atributos en la sección Ver, cambie la configuración del Fondo por defecto a Borrar el color:
Esto parece que funciona bien. Tampoco se necesitan ninguno de los cambios de código anteriores: se trata de una solución IB pura.
El color de fondo predeterminado de una UITableViewCell
en iOS 7 es blanco.
Debe establecer la propiedad backgroundColor
en algún lugar de su código. Por ejemplo, configúrelo después de que acaba de crear la celda.
cell.backgroundColor = [UIColor clearColor];
Escriba esto en su método cellForRowAtIndexPath antes de devolver la celda;
cell.backgroundColor = [UIColor clearColor];
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 solucionarlo, en el mensaje fuente de datos cellForIndexPath
, poniendo esto en:
cell.backgroundColor = cell.backgroundColor
Y funcionará. Esta es exactamente la razón por la que dije que es un error, ya que el código en sí es bastante bullsh * t, pero funciona.
La respuesta aceptada no me solucionó el problema. Tuve que hacer esto:
- En el constructor de interfaz, seleccione la vista de tabla. Luego, desde el inspector de atributos, en la sección Ver , configure el Fondo como transparente (0% de opacidad).
Desde el método cellForRowAtIndexPath de clase de fuente de datos de la tabla:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
Lo investigué un poco y descubrí que la celda backgroundColor está configurada por el sistema Apariencia. Entonces, si todas las celdas en su aplicación tienen fondo claro, la solución más fácil sería:
[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];
E incluso si tienen diferentes antecedentes, el color claro parece ser el más conveniente como el predeterminado.
Para mí establecer 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 lo deseé.
Podría ser que su UITableViewCell esté seleccionado de manera predeterminada. Puede confirmarlo utilizando el nuevo depurador visual de Xcode 6 (o descubra 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 aún no funcionó ... investigando un poco más, 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;
}
Solución Swift 1.2:
Simplemente agregue una definición explícita para el color de fondo de su celda de la siguiente manera:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Configure the cell...
cell.backgroundColor = UIColor.clearColor()
return cell
}
También puede usar el código de color para 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];
}
Tenía un problema similar, tuvo que
- Establezca azul como el estilo de selección y
agregue 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 }