objective c - Desafío UITableView/UITableViewCell con fondo transparente en iPad con iOS7
objective-c (4)
Anoche decidí actualizar a Xcode 5 y echar un vistazo a mi proyecto actual. Después de actualizar mis storyboards a la nueva interfaz de usuario, todo se veía genial y funcionaba bien. Como tengo un binario universal, decidí probar también cosas en el iPad y me di cuenta de que se había introducido un nuevo fondo blanco en mi UITableview, donde antes solía haber un color transparente / claro. Esto parece estar sucediendo en el nivel de la celda, no en el nivel de la mesa. Cuando ejecuto cosas en el simulador 6.1 todo se ve bien en iPad y iPhone. Y todo se ve bien en iPhone para iOS7.
Todo lo que he configurado para el creador de interfaces es idéntico para iPhone y iPad. Por lo que puedo decir, tiene algo que ver con esta nueva "vista de contenido" (que es un subgrupo de la celda de elementos) que no respeta un valor / configuración transparente.
¿Alguna idea / pensamiento?
Después de perder varias horas con el constructor de interfaz, estoy pensando que podría haber un error allí. Entonces comencé a buscar una respuesta programática. Aparentemente, si hubiera empezado aquí podría haber ahorrado un montón de tiempo. Al agregar al método:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Pude resolver el problema de transparencia en iPad agregando esta línea:
cell.backgroundColor = [UIColor clearColor]; // Adding this fixes the issue for iPad
Espero que esto ayude a todos los demás con el fondo blanco visto para iPad con tablas y iOS7.
En caso de que alguien más todavía tenga problemas con la vista de tabla / transparencia de la celda en el iPad, esto puede ayudar (copiado de https://.com/a/31396483/2301213 , es rápido porque las veces que están cambiando)
Parece que en algún punto del proceso de agregar una UITableView a la ventana (entre willMoveToWindow y didMoveToWindow), algunos iPad restablecen el color de fondo de la vista de tabla a blanco. Lo hace de forma encubierta sin utilizar la propiedad backgroundColor.
Ahora uso esto como una clase base en lugar de UITableView cuando necesito una tabla de colores / transparente ...
class ColorableTableView : UITableView {
var _backgroundColor:UIColor?
override var backgroundColor:UIColor? {
didSet {
_backgroundColor = backgroundColor
}
}
override func didMoveToWindow() {
backgroundColor = _backgroundColor
super.didMoveToWindow()
}
}
Las celdas también tienen su backgroundColor en blanco en mi iPad de la misma manera (es decir, las que están en la tabla durante el cambio a la ventana), así que lo mismo se aplica a ellas, para que no termines con la extraña celda opaca apareciendo desde cada cierto tiempo, ya que se reutiliza ...
class ColorableTableViewCell : UITableViewCell {
var _backgroundColor:UIColor?
override var backgroundColor:UIColor? {
didSet {
_backgroundColor = backgroundColor
}
}
override func didMoveToWindow() {
backgroundColor = _backgroundColor
super.didMoveToWindow()
}
}
Si está usando una tabla de celdas estática. puedes hacer lo siguiente:
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.backgroundColor = UIColor.clearColor()
}
Si está utilizando una UITableViewCell personalizada e invocando desde storyboard / xib, puede usar el siguiente código.
@implementation YourCustomTableViewCell
- (void) awakeFromNib
{
self.backgroundColor = [UIColor clearColor];
}