2011-01-24 9 views
18

In un modello UIViewController Ho la seguente implementazione di loadview (tutto è creato a livello di codice):UITableView non 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 
} 

Come potete vedere ho impostato backgroundColor a clearColor, ma quando compilo e fuggi il codice vedo sempre uno sfondo grigio dietro il tavolo: enter image description here

Non capisco cosa sto facendo male (sembra stupido, lo so), avevo lo stesso codice e funzionava perfettamente. Sto compilando con iOS SDK 4.2.1

+0

Non dovrebbe fare tutto questo setup in 'loadView', dovrebbe essere in' viewDidLoad'. In 'loadView' dovresti * solo * creare la vista, non impostare i colori, ecc. Va bene per impostare la cornice su' CGRectZero' in 'loadView'. Puoi cambiarlo più tardi in 'viewDidLoad'. – Robotbugs

risposta

43

È inoltre necessario impostare la proprietà backgroundView di UITableView su zero nelle versioni recenti (da 3.2) di iOS.

Come tale, l'aggiunta di ...

tbView.backgroundView = nil; 

... dovrebbe risolvere i vostri problemi.

Detto questo, se si desidera mantenere la compatibilità con i dispositivi precedenti alla 3.2, è necessario verificarne l'esistenza tramite il metodo instancesRespondToSelector prima di chiamarlo.

+0

che ha funzionato, grazie! Non capisco perché abbiano aggiunto questa vista, quale sarebbe stata la differenza semplicemente aggiungendo UITableView come sottomenu di qualsiasi vista personalizzata? – Robin

+0

@Robin Suppongo che sia un percorso più pulito se UITableView è effettivamente la tua visualizzazione di primo livello, ma è più o meno così. –

+0

Grazie per una buona risposta ,,, +1 –

11

Assicurarsi di aver impostato i seguenti 3 opzioni:

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

Questo ha funzionato per me, ma ho dovuto inserire il codice in 'viewWillAppear'. Non ha funzionato se lo metto in 'viewDidLoad'. – Guruniverse

Problemi correlati