UITableView fondo claro

90

Me doy cuenta de que iOS 7 no se ha lanzado oficialmente y no deberíamos discutirlo, PERO me estoy volviendo loco tratando de resolver este problema. En iOS 6, mi vista de tabla era transparente y se veía genial. Es la primera vez que se ejecuta iOS 7 y el fondo es blanco.

He intentado convertir el color de fondo de la tabla, el color de la celda, etc., en UIColor clearColor pero no he cambiado.

¿Cómo arreglar este problema?

la mesa

Teddy13
fuente
1
¿Intentó poner la mesa backgroundViewen una clara?
Deshacer
¿Podría mostrar el código donde está configurando el color de fondo? ¿Qué pasa con la vista de los padres? ¿Quizás el fondo de la vista de tabla es claro pero el padre no lo es?
sooper
Noté lo mismo, pero cuando instalé la misma aplicación que era anterior a mi versión actual de iOS 7.0, no estaba sucediendo. Entonces, ¿este problema se encuentra en xCode5.0?
Totumus Maximus

Respuestas:

123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

en cellForRowAtIndexPath

Además, asegúrese de que su vista de tabla realmente tenga un fondo transparente (en el guión gráfico): ingrese la descripción de la imagen aquí

golpe
fuente
George, agregue ese código dentro del método - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings
1
Para los casos, si realmente necesitas selectedBackgroundView, puedes poner lo siguiente en cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBg.png"]] autorelease]; o incluso en awakeFromNib: self.selectedBackgroundView = ... Tenga en cuenta que: self.backgroundColor = [UIColor clearColor]; no funciona en awakeFromNib en iOS7. Pero: cell.backgroundColor = [UIColor clearColor]; funciona correctamente solo en cellForRowAtIndexPath para iOS 7.0
slamor
11
Solo es necesario agregar la fila: cell.backgroundColor = [UIColor clearColor];
evya
Esto funciona como charm cell.backgroundColor = [UIColor clearColor];
bpolat
¿Cómo hacer esto en Swift?
Qadir Hussain
58

Pon esto:

cell.backgroundColor = [UIColor clearColor];

En esta sección:

cellForRowAtIndexPath
Maximus Vermillion
fuente
1
En iOS 6, es suficiente configurar el backgroundViewen una vista vacía, pero este código adicional es necesario para iOS 7.
Kevin Borders
25

Intente configurar backgroundView en nil primero.

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

No estoy seguro de si se trata de un cambio en la documentación con iOS7 o siempre ha estado ahí y simplemente no afectó el color de fondo, pero según la referencia de clase de UITableView @property backgroundView

"Debe establecer esta propiedad en nil para establecer el color de fondo de la vista de tabla".

editar: sintaxis de código corregida

dandan
fuente
25

Esto ha sido respondido, pero incorrectamente de muchas maneras.

Debe implementar el siguiente método de delegado:

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

No puede poner la solución en cellForRowAtIndexPath porque eso es después de que se renderiza la celda, y parpadeará un fondo blanco antes de que el fondo se establezca para borrar (en dispositivos más lentos).

¡Utilice este método de delegado y sus problemas estarán resueltos!

coger
fuente
1
Si. Para iOS 7, esta es la forma de borrar el fondo. Es posible que todas las demás sugerencias anteriores no funcionen.
girish_vr
15

En realidad, el lugar oficialmente correcto para cambiar el color de fondo de la celda es diferente según la documentación ( Referencia de clase UITableViewCell ):

Ya sea que use una celda predefinida o personalizada, puede cambiar el fondo de la celda usando la propiedad backgroundView o cambiando la propiedad heredada backgroundColor. 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 vista de tabla.

asdusd
fuente
Estoy intentando esto, pero las primeras celdas que se muestran tienen un fondo blanco. Si creo nuevas celdas desplazándome, tendrán el fondo transparente que quiero. No estoy seguro de qué más probar…
David Dunham
No importa, parece ser un problema de tiempo. Estaba haciendo cosas en awakeFromNib, que era demasiado pronto.
David Dunham
7

rápido 3, 4 y 5

cell.backgroundColor = UIColor.clear
Jamal alayq
fuente
6

Este es un problema bastante frustrante. Aquí está mi solución actual:

Agregue esto a su UITableViewCellsubclase.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}
Imbécil
fuente
Oh Dios. Gracias. Salvó mi noche. Tu respuesta debería haber sido la aceptada.
Michal Shatz
5

Esto funcionó para mí en iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

y luego en cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];
DevC
fuente
4

prueba este fragmento de código

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Marco Antonio Uzcategui Pescoz
fuente
4

Esto solo funcionó para mí cuando edité un color de fondo claro para cada celda y un color claro para la tabla en sí. AMBOS PROGRAMÁTICAMENTE

para establecer el color claro de la mesa:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

para establecer el color de las celdas:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}
SoliQuiD
fuente
3

Una cosa agradable. El color predeterminado de UITable parece ser blanco (no sé por qué)

Fondo blanco

Pero mejor cambia eso.

Paul Brewczynski
fuente
¡Perfecto! Esa era la paz que faltaba. ¡No se necesita una línea adicional de código!
Morpheus78
3

Primer set

tableView.backgroundColor = [UIColor clearColor];

Segundo juego

tableCell.backgroundColor = [UIColor clearColor];
Fantasyczl
fuente
3

cree IB Outlet para vista de tabla @IBOutlet débil var yourTable: UITableView!

en vista de carga

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

si desea borrar el color de la celda también haga esto en

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

    cell.backgroundColor = UIColor.clearColor() 

}
veenaay pawar
fuente
2

En mi aplicación, tuve que configurar el color de backgroundColormi UITableViewCellclase [UIColor clearColor]cuando actualicé iOS 7.

Arthur Dexter
fuente
2

Tratar

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

Y

cell.backgroundColor = [UIColor clearColor];
Jorgy
fuente
2

En mi caso, la celda se creó usando un xib. parece que el creador de interfaces en xcode5 tiene problemas para configurar clearColor en cell.backgroundColor.

Todo lo que necesitaba hacer era establecer

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}
Ben G
fuente
el control llega al final de la función no nula
ropo
2

Simplemente seleccione Clear Color on View Background para la tabla y también para la celda.

Walter Barlet
fuente
2

rápido 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
fuente
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
Kiran Jasvanee
fuente
0

Conjunto

tableView.backgroundColor = [UIColor clearColor];

en viewDidLoad.

si esto no funciona, intente:

tableView.backgroundView = nil;
Lal Krishna
fuente
0

En Swift 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
Patricio Bravo
fuente