2016-08-08 42 views
1

Ich habe das gleiche Problem wie der Thread here. Ich kann es schaffen, die Statusleiste sichtbar zu machen, indem ich den Text weiß mache, aber das ist nicht mein Ziel. Ich meine auch, wie alle Navigationsleisten oben auf der Leiste zu malen. Ich habe dies erreichen können, indem ich die gewünschten Shapes mit Ansichten unter layoutSubviews hinzugefügt habe, aber auf diese Weise können Sie nicht interagieren oder das UINavigationItem sehen. Code:DrawRect in einer UINavigationBar-Unterklasse macht die Statusleiste schwarz

- (void)drawRect:(CGRect)rect { 
[super drawRect:rect]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[[UIColor yellowColor] setFill]; 
UIRectFill(rect); 

Dies ist das Ergebnis:

enter image description here

Dies ist der Bast, die mit drawRect erreicht werden kann:

enter image description here

Und das passiert, wenn Sie es tun unter layoutSubviews:

enter image description here

Wie Sie sehen können, sind der hintere Text, der Pfeil, alle verloren. Also ich suche wirklich nach einer Möglichkeit, drawRect arbeiten zu lassen! Vielen Dank im Voraus für Ihre Hilfe!

+0

Sie wollten, dass es wie Ihr drittes Bild aussieht, aber der Button wird nicht angezeigt? – Tj3n

+0

@ Tj3n Ja, aber es ist nicht nur die Farbe, die ich möchte, sonst würde ich die Eigenschaft Farbton verwenden. Die Leiste soll eine richtige Skizze sein (mit einem Stern und mehreren Farben). Und das liegt daran, dass layoutsubviews oben auf drawRect funktioniert, da die Ansichten alle sichtbaren Elemente blockieren (die Schaltfläche, der Titel auf dem Hauptbildschirm, alles). – isklikas

+0

Sie können den 'navigationBar' Hintergrund, den Schatten und die Farbe wirklich verstecken, um Farbe zu löschen, dann fügen Sie Ihre benutzerdefinierte Ansicht unterhalb dieser unsichtbaren Navigationsleiste hinzu, ich tue das für benutzerdefinierte nav bar: D ich kann in swift antworten, wenn Sie brauchen, sonst googlen können ziemlich einfach – Tj3n

Antwort

1

Zuerst stellen Sie Ihren navBar unsichtbar mit:

navController.navigationBar.translucent = true 
navController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
navController.navigationBar.shadowImage = UIImage() 
navController.navigationBar.backgroundColor = UIColor.clearColor() 

eine Ansicht im Storyboard erstellen oder xib und Eigentum machen in der VC, fügen Sie es dann mit:

navController.view.insertSubview(navBarView, belowSubview: (navigationController?.navigationBar)!) 

Danach Ihre Subview sollte hinter der Bar Schaltflächen angezeigt und es kann in der Regel mit Ihrem eigenen navBarView, arbeitet aber die navBarView und gibt die navBar auf Standard entfernen erinnern, wenn Ansicht verschwinden:

navController.navigationBar.translucent  = false 
navController.navigationBar.shadowImage  = nil 
navController.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default) 
navController.navigationBar.backgroundColor = UIColor.whiteColor() 
+0

Vielen Dank, dies rettete mich vor einer Menge Frustration! :) – isklikas