2013-09-25 6 views
5

Ich habe Probleme mit einem ios7/object-c-Problem, das mir hoffentlich helfen kann.Statusleiste wird nicht wie erwartet auf dem iPad gerendert

Als Hintergrund habe ich eine App, die auf io6-Geräten wie erwartet rendert, aber ich versuche, es in Übereinstimmung mit ios7 zu bringen.

Wo die Dinge verwirrend geworden sind, ist die Tatsache, dass mein Code wie erwartet auf dem iPhone funktioniert, aber es ist nicht auf dem iPad.

Von den Bildern unten sehen Sie, dass die Statusleiste (Träger, Zeit, Batterie) auf dem iPhone als erwartet macht aber nicht das iPad:

First the iPhone

Now the iPad:

(Anmerkung: Da dies mein erster Beitrag ist, kann ich die Bilder nicht direkt einbetten, tut mir leid.

Von der Codierung Sicht, habe ich alle Vorschläge unter How to change Status Bar text color in iOS 7 ohne Glück versucht.

Was ich habe, dass die App wie erwartet gerendert ist die folgende Definition in meinem AppDeligate.

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

Jetzt denke ich, dass Problem ist, dass, obwohl ich den Bar-Stil zu UIStatusBarStyleLightContent festgelegt haben, die den Text in Weiß setzen sollte, ist es nicht das auf dem iPad tut. Stattdessen wird es als schwarz auf schwarz dargestellt.

Dies scheint der Fall zu sein, denn wenn ich die Zeile entfernen:

newsNavigationController.navigationBar.translucent = NO; 

die schwarzen Änderungen an einen dunkelgrau, und der Träger, Datum, Batterie, kann aber in der schwarz zu sehen. Ich bin bereit, mit dem dunklen Grau gegen den schwarzen Hintergrund zu leben, aber die Statusleiste Elemente müssen in weiß wie das iPhone zu rendern.

Irgendwelche Vorschläge?

P.S. Ich bin mir nicht sicher, ob dies hilft, die Dinge in die richtige Richtung zu lenken, aber das iPad verwendet einen Splitview-Controller.

Dank

+0

Nur hinzufügen scheint das Problem mit dem UISplitViewController zusammenhängen. Wenn ich es entferne, wird der Statustext weiß wie erwartet dargestellt. – user2816721

Antwort

0

Try Status bar style~ipad setzen: UIStatusBarStyleLightContent in Ihrem info.plist.

+0

Danke für den Vorschlag, aber leider keine Liebe. Ich habe auch einen generischen Eintrag von nur "Statusleiste Stil" auf UIStatusBarStyleLightContent versucht und das hat auch nicht geholfen. – user2816721

8

Da die Statusleiste die Präferenz des Stammansicht-Controllers verwendet, funktioniert die Anpassung des bevorzugten Statusleisten-Stils für Ihre Navigationssteuerungen nicht auf dem iPad, da keiner der Stammansicht-Controller ist. Sie müssen daher preferredStatusBarStyle in einer Unterklasse von UISplitViewController überschreiben.

@implementation DGBaseSplitViewController 

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

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleLightContent; 
} 

@end 
+0

Das ist i.mo.o die beste Lösung – ullstrm

+0

Dies ist das einzige, was bei mir funktioniert hat. Bevor es funktionierte, musste ich sicherstellen, dass der Split View Controller in meinem iPad-Storyboard neben der Neuzuweisung der Klasse im App-Delegate auch in die neue Unterklasse eingefügt wurde. –

5

Sub-Klassierung der SplitViewController wie von Wayne empfohlen, könnte sehr gut eine gültige Lösung sein, aber das ist, was ich tun endete, dass das Problem für meine Zwecke gelöst.

  1. Stellen Sie die UI-Statusleiste Versteckt = TRUE (Ich möchte nicht auf die Statusleiste auf den Splash-Screen) [die in dem gespeichert wird.plist als UIStatusBarHidden = true & UIStatusBarHidden ~ ipad = true]

  2. In der .plist - UIStatusBarStyle = UIStatusBarStyleLightContent

  3. In der .plist - UIViewControllerBasedStatusBarAppearance = false

  4. In meinem AppDeligate, ganz oben fügte ich die Zeile hinzu:

    [UIApplication sharedApplication] setStatusBarHidden: NO];

    Das sorgt dafür, dass die Statusleiste nach dem Start des Begrüßungsbildschirms erneut angezeigt wird.

0

Kombination von:

  1. -View-Controller-basierte Statusleiste Aussehen = NO

  2. Statusleiste style = UIStatusBarStyleLightContent

für mich gearbeitet