2015-06-10 20 views
6

Problem:Warum wird die UINavigationBar schwarz?

Ich habe ein UITableViewController in einem UINavigationController eingebettet. Durch Drücken einer Zelle in der Tabellenansicht wird zu einem anderen Tabellenansicht-Controller gewechselt. In der Tabelle View-Controller, ich möchte für die Navigationsleiste unsichtbar sein, während immer noch die Tableiste Elemente zu halten, so habe ich folgendes seine viewDidLoad():

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
     self.navigationController?.navigationBar.shadowImage = UIImage() 
     self.navigationController?.navigationBar.translucent = true 
     self.navigationController?.navigationBar.tintColor = .blackColor() 

Zum ersten UITableViewController, ich möchte die Navigationsleiste, normal zu sein, so in seinem viewDidAppear() ich habe folgende:

self.navigationController?.navigationBar.translucent = false 

Alles funktioniert gut, außer während des Übergangs in die Navigationsleiste auf dem ersten view-Controller verschwindet in Schwärze (was ich über performSegueWithIdentifier tue), die aussieht hässlich um ehrlich zu sein. Gibt es eine Möglichkeit, dies zu verhindern/zu beheben?

Screenshot: enter image description here

+0

Haben Sie jemals eine Antwort darauf gefunden? –

+0

nein @Inturbidus – cyril

Antwort

0

Sie können die Transluzenz der Navigationsleiste animieren. So in der viewDidLoad für Ihre zweite UITableViewController, können Sie die folgende schreiben:

override func viewDidLoad() { 
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) 
    self.navigationController?.navigationBar.shadowImage = UIImage() 
    self.navigationController?.navigationBar.tintColor = .blackColor() 

    // Play around with the duration until you find 
    // a time interval, you find suitable 
    UIView.animateWithDuration(2) { 
     self.navigationController?.navigationBar.translucent = true 
    } 
} 
+0

Ich habe das versucht, aber es gibt kein Gleichgewicht zwischen der Nav-Leiste verschwinden schnell genug und der schwarze Teil erscheint. Ich versuche, an eine Problemumgehung zu denken. – cyril

+0

Was meinst du mit Balance? Denn wenn ich das Code-Snippet oben im Simulator laufe, sieht es ziemlich gut aus. Könnten Sie mit der Animation der Transluzenz eine kleine QuickTime Aufnahme machen, wie es für Sie aussieht? – Kumuluzz

+0

Welche Geschwindigkeit verwenden Sie? Und leider kann ich nicht, weil dieses Projekt für einen Kunden ist. Wie auch immer, ich versuche zu sagen, dass eine zu langsame Geschwindigkeit dazu führt, dass die Navigationsleiste im zweiten View-Controller immer noch vorübergehend sichtbar ist und zwei schnelle Leads zum schwarzen Teil erscheinen. Wenn Sie wissen möchten, was ich erreichen möchte, sehen Sie sich die Musik-App in iOS 8.4 oder iOS 9 an, wenn Sie ein Album mit seinen Songs anschauen. – cyril

2

Ich habe vor kurzem ein sehr ähnliches Problem hatte. Versuchen Sie, self.navigationController?.navigationBar.translucent = true in beiden View-Controllern und self.edgesForExtendedLayout = UIRectEdgeNone einzustellen.
Storyboard-Version: Extended Edges - Under Top Bars

+1

Einstellung von self.edgesForExtendedLayout = UIRectEdge.None arbeitete für mich! Vielen Dank! –

Verwandte Themen