0

Ich arbeite an einem Farbverlauf hinter meiner Navigationsleiste hinzufügen. Ich unterordnete dazu UINavigationController. Der Farbverlauf sollte sowohl die Statusleiste als auch die UINavigationBar füllen. Das Problem ist, dass ich es nur erreichen kann, um die UINavigationBar (über self.toolBar.bounds) zu füllen. Ich habe versucht, die Höhe der Statusleiste hinzugefügt, aber es war es nicht möglich für +CGRect für Frame von UINavigationController + Statusleiste

@IBOutlet weak var toolBar: UINavigationBar! 

let gradient:CAGradientLayer = CAGradientLayer() 
gradient.frame = self.toolBar.bounds 
gradient.colors = [UIColor.greenColor().CGColor, UIColor.blueColor().CGColor] 
self.toolBar.layer.insertSublayer(gradient, atIndex: 1) 
toolBar.barTintColor = UIColor.grayColor() 

Hier ist ein Screenshot von dem, was der obige Code erzeugt: Gradient is filling the wrong frame.

Der Farbverlauf sollte bis in die Statusleiste reichen, daher wird grayColor nicht angezeigt.

+0

helfen Sie können versuchen, UIStatusBarStyleLightContent Eigenschaft festlegen graue Farbe –

+0

@JP_Mob entfernen - Es ist bereits festgelegt, dass. Das Grau ist explizit in meinem Code festgelegt. – Joe

Antwort

2

Sie setzen Gradienten 20` wenn Statusleiste gibt. Wenn Sie den Farbverlauf also auf die Navigationsleiste einstellen, wird er definitiv nur darauf eingestellt. Es beeinflusst definitiv nicht die Statusleiste, weil es eine andere Sache ist.

In Ihrem Fall sollten Sie benutzerdefinierte Navigationsleiste ich denke mit UIView.

Verstecken Sie einfach Standard-Navigationsleiste für bestimmte dieser Ansicht Controller und Drag uiview der Größe 64 und setzen Sie auf (0,0), so dass es sowohl die Statusleiste und Navigationsleiste Raum abdeckt.

Und setzen Sie den Farbverlauf auf diese Ansicht und Sie werden zum gewünschten Effekt kommen, den Sie wollen.

Hope this :)

+0

Das macht Sinn. Daran habe ich nicht gedacht. Ist die Erstellung einer eigenen Navigationsleiste in Xcode/swift üblich? – Joe

+0

Ja, es ist üblich. Die meisten Leute verwenden benutzerdefinierte Navigationsleiste wie diese – Lion

+0

Ich bin derzeit meine UITableViewController in einem Navigationscontroller einbetten. Wenn ich meine eigene Ansicht machen sollte, die als Navigationsleiste dient, muss ich nicht mehr in den Navigationscontroller einbetten? Ich kann einfach den eingebetteten Nav-Controller löschen und dann die Einschränkungen manuell einstellen, richtig? – Joe

-1

können Sie Bild sehen auch Gradient:

[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"gradiant_bg"]]];