ios - UITableView backgroundColor siempre blanco en iPad
objective-c uibackgroundcolor (16)
Swift 3.1
He
UITableViewCell
este error colocando esto en mi subclase
UITableViewCell
:
Cuando la celda se carga desde el archivo NIB:
UITableViewCell.appearance().backgroundColor = UIColor.clear
y cuando el sistema reutiliza la celda
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
Se supone que iOS 10 soluciona este problema en Interface Builder, como dijo animeshporwal .
Estoy trabajando en un proyecto
Tengo muchos
UITableView
s configurados como color claro.
El color de fondo de sus vistas está configurado para 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 la nieve!
¿Cuál podría ser la razón de esto?
Acabo de tener este problema y lo solucioné cambiando el color de fondo de la vista (en oposición al de tableView). Parece en iPad, ese es el que se usa primero y en mi caso se configuró en blanco.
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 backgroundColor no siempre produce un efecto, pero configurar una vista de fondo funciona bien.
En mi experiencia, algunas versiones de iOS establecen el backgroundColor de UITableViewCell antes de llamar a
tableView:willDisplayCell:forRowAtIndexPath:
del delegado
tableView:willDisplayCell:forRowAtIndexPath:
Restablecer de nuevo a su color personalizado en ese método lo arregla.
Esto resuelve este problema para mí
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
tableView.backgroundColor = UIColor.clear
}
Esto se puede lograr en un Storyboard de la siguiente manera:
- Muestra el esquema del documento para tu guión gráfico
- Dentro de su mesa, elija un TableViewCell
- ir a la vista de contenido dentro de esa celda
- Establezca el color de fondo de la vista de Contenido.
Resultado: las vistas del simulador de iPad y iPhone son iguales
Estoy usando
Storyboard
con
UITableViewControlrs
, por lo que la decisión más simple fue subclasificar todos los controladores y agregar este método a los padres
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.clear
}
Partiendo de la respuesta de Ben Flynn ... el color de fondo de cell.contentView no es necesariamente igual al color de fondo de cell.content. En ese 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;
}
Si bien la declaración parece ridícula y loca ... resuelve el problema.
Puede solucionar esto haciendo una configuración de API de apariencia en su archivo appDelegate:
Rápido:
UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
Tengo una vista de tabla con muchas celdas diferentes en el interior, 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 nil, por lo que lo que hizo fue borrar el
cell.backgroundColor = nil
.
Básicamente es el error de Xcode (creo, ¡sí, apesta!),
cell.backgroundColor
todavía tiene color, pero no se puede mostrar.
Después de depurar por un tiempo, según 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
Tengo una vista de tabla transparente con celdas de vista de tabla semitransparente. 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 para borrar los trabajos, ya que lo hago en cada
tableView(_ tableView: UITableView, cellForRowAt indexPath)
.
El problema para mí fue solo que el fondo de la vista de la tabla permaneció blanco.
Intenté todas las combinaciones que encontré con respecto a este problema, pero lo único que realmente necesitaba era establecer el fondo de las
vistas de tabla
en transparente en cada
tableView(_ tableView: UITableView, cellForRowAt indexPath)
.
No es súper intuitivo, pero al menos funciona.
:PAGS
Buenas noticias: según las notas de la versión, para iOS 10:
Cuando se ejecuta en iPad, ahora se respeta el color de fondo establecido para UITableViewCell en un Storyboard.
Para versiones <10:
Estaba viendo esto en iOS 8 (8.3). Aunque en IB mis celdas eran de "color claro" y sus vistas de contenido eran de "color claro", se mostraban en blanco. 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;
}
Parece que mis celdas reutilizables retiradas tienen su fondo forzado a blanco en 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.
RÁPIDO
Esto también me sucedió a mí. Mi vista de tabla en mi SWRevealViewController apareció en blanco en mi iPad cuando se veía clara (que es lo que quería con una imagen de fondo) en mi iPhone. Intenté todo lo anterior, pero esto es lo que terminó funcionando para mí en mi viewDidLoad ().
override func prepareForReuse() {
super.prepareForReuse()
self.backgroundColor = UIColor.clear
}
SWIFT También tuve este problema. Funciona bien en .phone pero tableViewCells se vuelve blanco en .pad. Pensé en mostrar cómo lo solucioné usando swift.
Conecte The tableViewCell al viewController.swift como un @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 sé qué está sucediendo aquí, pero esto me resolvió.
SWIFT 3.XX
Pon esto
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
cell.backgroundColor = [UIColor clearColor];
}
}
En
AppDelegate
tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()