2011-01-24 10 views
18

En un modelo UIViewController tengo la siguiente implementación de loadView (todo lo que se crea mediante programación):UITableView color de fondo no cambia

- (void)loadView { 

    // Add Basic View 
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 540, 620)]; 
    myView.backgroundColor = [UIColor clearColor]; 
    self.view = myView; 
    [myView release]; 

    // Add NavigationBar 

    // Add a BG image 

    // Add Table 
    UITableView *tbView = [[UITableView alloc] initWithFrame:CGRectMake(30, 80, 480, 250) style:UITableViewStyleGrouped]; 
    tbView.dataSource = self; 
    tbView.delegate = self; 
    tbView.scrollEnabled = NO; 
    tbView.backgroundColor = [UIColor clearColor]; 
    [tbView reloadData]; 

    [self.view addSubview:tbView]; 
    [tbView release]; 

    // some more code 
} 

Como se puede ver me puse backgroundColor a clearColor, sin embargo, cuando compilar y ejecutar el código siempre que veo un fondo gris detrás de la mesa: enter image description here

no entiendo lo que estoy haciendo mal (suena estúpido, lo sé), que solía tener el mismo código y funcionó perfectamente bien. Estoy compilando con iOS SDK 4.2.1

+0

No deberías estar haciendo toda esta configuración en 'loadView', que debe estar en' viewDidLoad'. En 'loadView' debe * solo * crear la vista, no establecer colores, etc. Está bien establecer el marco en' CGRectZero' en 'loadView'. Puede cambiarlo más tarde en 'viewDidLoad'. – Robotbugs

Respuesta

43

También debe establecer la propiedad backgroundView de su UITableView en cero en versiones recientes (desde 3.2) de iOS.

Como tal, añadiendo ...

tbView.backgroundView = nil; 

... debe resolver sus problemas.

Dicho esto, si desea mantener la compatibilidad con dispositivos anteriores a 3.2, debe verificar la existencia de esto a través del método instancesRespondToSelector antes de llamarlo.

+0

que funcionó, ¡gracias! Aunque no entiendo por qué agregaron esta vista, ¿cuál sería la diferencia al solo agregar UITableView como una subvista de cualquier vista personalizada? – Robin

+0

@Robin Supongo que es una ruta más limpia si el UITableView es efectivamente su vista de nivel superior, pero eso es más o menos. –

+0

Gracias por una buena respuesta ,,, +1 –

11

Asegúrese de que ha establecido las siguientes 3 opciones:

tbView.opaque = NO; 
tbView.backgroundColor = [UIColor clearColor]; 
tbView.backgroundView = nil; 
+0

Esto funcionó para mí, pero tuve que poner el código en 'viewWillAppear'. No funcionó si lo puse en 'viewDidLoad'. – Guruniverse

Cuestiones relacionadas