UITableView backgroundColor siempre blanco en iPad


Estoy trabajando en un proyecto. Tengo un montón de UITableView s que se establecen como color claro. El color de fondo de sus vistas se establece en mi color personalizado y todo está bien en iPhone .

El problema surge en iPad ! Intenté casi todo, pero mi UITableView tiene un color blanco.

Revisé los otros temas, como: UITableView backgroundColor siempre gris en iPad, pero nada funcionó. Además, mi problema no es gris, es blanco como ¡nieve!

¿Cuál podría ser la razón de ello?

Author: Community, 2014-12-18

16 answers

Buenas noticias: De acuerdo con las notas de la versión, para iOS 10:

Cuando se ejecuta en iPad, el color de fondo establecido para una UITableViewCell en un Storyboard ahora se respeta.

Para versiones

Estaba viendo esto en iOS 8 (8.3). A pesar de que en IB mis celdas eran de "color claro" y sus vistas de contenido eran de "color claro", se mostraban como blancas. Una solución imperfecta pero razonable, ya que todavía toma valores de IB:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell.backgroundColor = cell.contentView.backgroundColor;
    return cell;
}

It parece que mis células reusables dequeued obtener su fondo forzado a blanco en el iPad. Pude determinar esto usando el depurador de jerarquía de vistas.

Una vez que hice esto, pude usar el color de fondo de la tabla y no tuve que establecer una vista de fondo, aunque eso también funciona.

 123
Author: Ben Flynn,
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-09-08 18:17:04

Puede arreglar esto haciendo una configuración de la API de apariencia en su archivo AppDelegate:

Swift:

UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
 37
Author: Kiko Lobo,
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-02-03 06:22:03

En lugar de establecer el color de fondo, intente usar una vista de fondo, como esta:

- (void)viewDidLoad {
    self.tableView.backgroundView = [UIView new];
    self.tableView.backgroundView.backgroundColor = [UIColor clearColor];
}

He tenido problemas en los que usar el color de fondo no siempre produce un efecto, pero establecer una vista de fondo en su lugar funciona bien.

 19
Author: John Stephen,
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-05 22:13:16

[1] Construyendo a partir de la respuesta de Ben Flynn... celular.El color de fondo de contentView no es necesariamente igual a la celda.color de fondo. En cuyo caso, descubrí que esto funcionó para resolver el problema de fondo blanco del iPad en más situaciones:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        ...
        cell.backgroundColor = cell.backgroundColor;
        return cell;
    }

Mientras que la declaración parece ridícula y loca... resuelve el problema.

 12
Author: Ray W,
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-06-17 22:18:37

Tengo una vista de tabla con muchas celdas diferentes dentro, cada una tiene un color diferente.

La respuesta de @Ben Flynn cell.backgroundColor = self.contentView.backgroundColor no puede lograr eso. La razón es self.contentView.backgroundColor es cero, así que lo que hiciste es simplemente borrar el cell.backgroundColor = nil.

Básicamente es el error de Xcode (creo que, sí, apesta!), cell.backgroundColor todavía tiene color, pero no se puede mostrar.

Después de depurar por un tiempo, basado en la respuesta de @Ray W, aquí está mi solución.

@impelement YouCustomCellClass

- (void)awakeFromNib {
    [super awakeFromNib];
    self.backgroundColor = self.backgroundColor; // What the heck?? But it is.
}

@end
 10
Author: nahung89,
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-28 01:48:54

Esto resuelve este problema para mí

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    tableView.backgroundColor = UIColor.clear
}
 4
Author: Ram,
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
2017-02-28 08:25:10

En mi experiencia, algunas versiones de iOS establecen el color de fondo de UITableViewCell antes de llamar al delegado tableView:willDisplayCell:forRowAtIndexPath:. El restablecimiento a su color personalizado en ese método lo soluciona.

 3
Author: Sterling Christensen,
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-12-19 07:53:15

SWIFT 3.XX

Pon esto

UITableViewCell.appearance().backgroundColor = UIColor.clear
{[3] {} En[2]}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
 2
Author: Abhishek Mitra,
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
2017-08-11 07:15:53

Estoy usando Storyboard con UITableViewControlrs, por lo que la decisión más simple fue subclasificar todos los controladores y agregar este método al padre

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        cell.backgroundColor = [UIColor clearColor];
    }
}
 1
Author: d.rozumeenko,
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-19 12:15:55

SWIFT

Esto también fue un suceso para mí. Mi vista de tabla en mi SWRevealViewController apareció en blanco en mi iPad cuando se veía claro (que es lo que quería con una imagen de fondo) en mi iPhone. Probé todo lo anterior, pero esto es lo que terminó funcionando para mí en mi viewDidLoad().

tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()
 1
Author: A.J. Hernandez,
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-06-24 18:01:05

Swift 3.1

He trabajado alrededor de este error colocando esto en mi subclase UITableViewCell:

Cuando se carga la celda desde el archivo NIB:

override func awakeFromNib() {
    super.awakeFromNib()
    self.backgroundColor = UIColor.clear
}

Y cuando la célula está siendo reutilizada por el sistema

override func prepareForReuse() {
    super.prepareForReuse()
    self.backgroundColor = UIColor.clear
}

Se supone que IOS 10 solucionará este problema en Interface Builder, como dijo animeshporwal .

 1
Author: Xavi Moll,
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
2017-05-22 14:07:09

Esto se puede lograr en un guion gráfico de la siguiente manera:

  • Mostrar el esquema del documento para su storyboard
  • Dentro de su mesa, elija una TableViewCell
  • vaya a la vista de contenido dentro de esa celda
  • Establece el color de fondo de la vista de contenido.

Resultado: las vistas del simulador de iPad y iPhone tienen el mismo aspecto

 0
Author: Mark80,
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-12-13 11:33:02

Yo solo tuve este problema y lo solucionó cambiando el fondo de la Vista (como opuesta a la del formato tableview). Parece que en el iPad, que es el que se utiliza primero y en mi caso se estableció en blanco.

 0
Author: Diego Rebosio,
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-12-28 23:16:56

SWIFT Yo también tuve este problema. Funciona bien .teléfono pero tableViewCells ir blanco en .almohadilla. Pensé en mostrar cómo lo arreglé usando swift.

Conecte la TableViewCell al ViewController.swift como @IBOutlet así:

    @IBOutlet weak var tvc1: UITableViewCell!
    @IBOutlet weak var tvc2: UITableViewCell!
    @IBOutlet weak var tvc3: UITableViewCell!

Luego en viewDidLoad ponga lo siguiente:

tvc1.backgroundColor = tvc1.backgroundColor
tvc2.backgroundColor = tvc2.backgroundColor
tvc3.backgroundColor = tvc3.backgroundColor

Muy extraño, no se qué está pasando aquí, pero esto lo resolvió para mí.

 0
Author: Steve,
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-07 02:11:39

Esto parece solucionarse con iOS 10 Beta 4 como se menciona en las notas de la versión en UIKit notas:

introduzca la descripción de la imagen aquí

 0
Author: Animesh Porwal,
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-08 18:35:11

Tengo una vista de tabla transparente con celdas de vista de tabla semitransparentes. Establezco el color de fondo de la vista de tabla para borrar cuando creo la tabla. Esto funciona para todas las combinaciones de iOS/dispositivo, excepto iPad + iOS 8, donde el color de fondo sigue siendo blanco.

Para mí, establecer el color de fondo de la celda en semitransparente y el color de fondo de la vista de contenido en claro funciona, ya que lo hago en cada tableView(_ tableView: UITableView, cellForRowAt indexPath). El problema para mí era solo que el fondo de la vista de tabla permanecía blanco.

Probé todas las combinaciones que encontré con respecto a este problema, pero lo único que realmente necesitaba era establecer el fondo vistas de tabla en transparente en cada tableView(_ tableView: UITableView, cellForRowAt indexPath). No es súper intuitivo, pero al menos funciona. : P

 0
Author: Daniel Saidi,
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-11-14 09:56:22