2013-09-25 3 views
5

Sono alle prese con un problema ios7/obiettivo-c che spero che qualcuno mi possa aiutare.La barra di stato non esegue il rendering come previsto su iPad

Come sfondo, ho un'applicazione che esegue il rendering come previsto sui dispositivi io6, ma sto cercando di renderlo conforme a ios7.

Dove le cose sono diventate confuse è il fatto che il mio codice funziona come previsto su iPhone ma non è sull'iPad.

Dalle immagini qui sotto si vedrà che la barra di stato (vettore, tempo, batteria) rende come previsto su iPhone, ma non l'iPad:

First the iPhone

Now the iPad:

(nota: poiché questo è il mio primo post, non posso incorporare direttamente le immagini, mi dispiace per quello).

Dal punto di vista della codifica, ho provato tutti i suggerimenti indicati a: How to change Status Bar text color in iOS 7 senza fortuna.

Quello che ho che rende il rendering dell'app come previsto è la seguente definizione nel mio AppDeligate.

// News page 
newsViewController = [[NewsViewController alloc] init]; 
newsNavigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController]; 
newsNavigationController.navigationBar.translucent = NO; 
newsNavigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; 
newsNavigationController.navigationBar.tag = 4013; 

ora penso che problema è che, anche se ho impostato lo stile bar per UIStatusBarStyleLightContent, che dovrebbe mettere il testo in bianco, non sta facendo questo sul iPad. Invece diventa nero su nero.

Questo sembra essere il caso, perché se tolgo la linea:

newsNavigationController.navigationBar.translucent = NO; 

le modifiche nero a un grigio scuro, e il vettore, la data, la batteria, può essere visto, ma in nero. Sono disposto a vivere con il grigio scuro rispetto allo sfondo nero, ma gli elementi della barra di stato dovranno renderizzare in bianco come l'iphone.

Qualche suggerimento?

P.S. Non sono sicuro che questo aiuterà a indirizzare le cose nella giusta direzione, ma l'iPad utilizza un controller splitview.

Grazie

+0

Proprio aggiungere , il problema sembra essere correlato a UISplitViewController. Se lo rimuovo, il testo di stato esegue il rendering in bianco come previsto. – user2816721

risposta

0

provare a mettere Status bar style~ipad: UIStatusBarStyleLightContent in Info.plist.

+0

Grazie per il suggerimento, ma purtroppo nessun amore. Ho anche provato una voce generica di solo "Stato barra di stato" impostata su UIStatusBarStyleLightContent e che non ha aiutato neanche. – user2816721

8

Poiché la barra di stato utilizzerà la preferenza del controller di visualizzazione radice, la regolazione dello stile preferito della barra di stato per i controller di navigazione non funzionerà su iPad, poiché nessuno di essi è il controller di visualizzazione radice. È necessario, quindi, sovrascrivere preferredStatusBarStyle in una sottoclasse di UISplitViewController.

@implementation DGBaseSplitViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleLightContent; 
} 

@end 
+0

Questa è la migliore soluzione – ullstrm

+0

Questa è l'unica cosa che ha funzionato per me. Prima che funzionasse, dovevo anche assicurarmi di impostare Split View Controller nello storyboard per iPad nella nuova sottoclasse, oltre a riassegnare la classe nel delegato dell'app. –

5

sub-classificare la SplitViewController come raccomandato da Wayne, potrebbe benissimo essere una soluzione valida, ma questo è quello che ho finito per fare che ha risolto il problema per i miei scopi.

  1. impostare la barra di stato UI Hidden = TRUE (non voglio che la barra di stato sulla nella schermata iniziale) [che è memorizzato nel.plist come UIStatusBarHidden = true & UIStatusBarHidden ~ ipad = true]

  2. Situato nel Plist - UIStatusBarStyle = UIStatusBarStyleLightContent

  3. Situato nel Plist - UIViewControllerBasedStatusBarAppearance = false

  4. Nel mio AppDeligate, vicino alla cima, ho aggiunto la riga:

    [UIApplication sharedApplication] setStatusBarHidden: NO];

    Che si occupa di visualizzare nuovamente la barra di stato dopo che è stata visualizzata la schermata iniziale.

0

Combinazione di:

  1. View Controller-based barra di stato l'aspetto = NO

  2. Barra di stato style = UIStatusBarStyleLightContent

ha lavorato per me