2016-06-22 12 views
0

Ich habe eine UINavigationController mit 3 ViewControllern. Wir wissen, dass die drei viewControllers eine gemeinsame navigationBar teilen. Wenn ich die navigationBar völlig transparent einstellen möchte. Ich kann den Code in viewWillAppear setzen:Show transparent UINavigationbar wird schwarze Leiste sehen, wenn der ViewController wischen

[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
[self.navigationBar setShadowImage:[UIImage new]]; 
[self.navigationBar setBarTintColor:[UIColor clearColor]]; 
    self.navigationBar.translucent = YES; 

und legen Sie es in viewWillDisappear zurück:

[self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 
[self setShadowImage:nil]; 
[self setBarTintColor:THEME_COLOR]; 
self.translucent = NO; 

ich die UINavigationBar durchscheinend nur in viewControllerB setzen wollen, so habe ich den Code in viewControllerB. Wenn ich jedoch popToViewController B, kann ich einen schwarzen Balken in der oberen rechten Ecke des Bildschirms sehen. Da wird die viewWillAppear aufgerufen. Es scheint, dass es in meinem Fall nicht gelöst werden kann.

komme ich mit einigen Methoden aus:

  1. verwenden unterschiedliche UINavigationBar.
  2. verwenden Sie verschiedene UINavigationController. Aber UINavigationController kann nicht eine neue UINavigationController
  3. Custom UIView wie UINavigationBar schieben.

ich oben methos denken ist komplizierter.

Irgendwelche Ideen Dank!

+0

Setzen Sie Ihren Code von 'ViewControllerB' und' ViewControllerC' –

+0

Ich verstehe nicht, was Sie meinen, "Da die' viewWillAppear' aufgerufen wird. Es scheint, kann in meinem Fall nicht gelöst werden. "? Kannst du das anders ausdrücken? Und können Sie ein Bild des schwarzen Balkens oben rechts auf dem Bildschirm hinzufügen? Es ist seltsam, dass Sie die Leiste nicht über den gesamten oberen Bildschirmrand sehen. – Palpatim

Antwort

0

Diese schwarze Farbe, die Sie sehen, ist die Hintergrundfarbe des Hauptfensters. Sie können Hintergrundbild oder Farbe zu Ihrem Hauptfenster von AppDelegate didFinishLaunchingWithOptions Methode (das hängt völlig mit Ihrem Design der Ansicht Controller B), so dass Sie keinen Unterschied sehen.

Oder

einfach können Sie viewDidAppear anstelle viewWillAppear zu verwenden, aber das wird wenig flick obwohl haben.