objective-c ipad uitableview ios7

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]; }