wake-up-neo.com

Einstellen des Verlaufs sowohl in der Navigationsleiste als auch in der Statusleiste

Ich versuche, den Hintergrund einer Navigationsleiste zu ändern, indem Sie eine Ebene erstellen und sie als Sublayer zur Navigationsleiste hinzufügen. Dies betrifft jedoch nur die Navigationsleiste. 

1

Ich möchte nicht den gesamten oberen Bildschirmbereich beeinflussen. Code enthalten:

let navBarLayer = StyleUtils.createGradientLayerWithColors(color: StyleUtils.Colors.SKY_BLUE, frame: (self.navigationController?.navigationBar.bounds)!)

self.navigationController?.navigationBar.layer.addSublayer(navBarLayer)

Die Funktion createGradientLayerWithColors gibt einen CAGradientLayer für den angegebenen Frame zurück.

Was vermisse ich? Danke im Voraus.

EDIT:

Ich versuchte Nathaniels Antwort, bekam aber folgendes:

 problem

Es ist erwähnenswert, dass dies auch eine TableView ist.

LÖSUNG:

Ich habe diese Frage gefunden, die mir geholfen hat, das Problem zu lösen.

Der endgültige korrekte Code lautet:

func setNavBarColor() {

    let navBar = self.navigationController?.navigationBar

    //Make navigation bar transparent
    navBar?.setBackgroundImage(UIImage(), for: .default)
    navBar?.shadowImage = UIImage()
    navBar?.isTranslucent = true

    //Create View behind navigation bar and add gradient
    let behindView = UIView(frame: CGRect(x: 0, y:0, width: UIApplication.shared.statusBarFrame.width, height: UIApplication.shared.statusBarFrame.height + (navBar?.frame.height)!))

    let layerTop = StyleUtils.createGradientLayerWithColors(color: StyleUtils.Colors.SKY_BLUE, frame: behindView.bounds)
    behindView.layer.insertSublayer(layerTop, at: 0)

    self.navigationController?.view.insertSubview(behindView, belowSubview: navBar!)

}
10
PablodeAcero

So schaffe ich es.

Zuerst stelle ich die Navigationsleiste auf transparent: 

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
self.navigationBar.backgroundColor = UIColor.clear

Dann füge ich den Verlauf der Ansicht hinter der Statusleiste und der Navigationsleiste hinzu: 

    let gradient = CAGradientLayer()
    gradient.frame = CGRect(x: 0, y: 0, width: UIApplication.sharedApplication().statusBarFrame.width, height: UIApplication.sharedApplication().statusBarFrame.height + self.navigationController!.navigationBar.frame.height)
    gradient.locations = [0.0,1.0]
    gradient.colors = [UIColor.anyColor().colorWithAlphaComponent(0.4).CGColor, UIColor.clearColor().CGColor]
    self.view.layer.addSublayer(gradient)
    self.view.backgroundColor = UIColor.clear
12
Nathaniel

Meine Wahl:

let gradientLayer = CAGradientLayer()

let layerY = -UIApplication.shared.statusBarFrame.size.height as CGFloat

let layerHeight = (self.navigationController?.navigationBar.frame.size.height)! + UIApplication.shared.statusBarFrame.size.height as CGFloat

gradientLayer.frame = CGRect(x: 0, y: layerY, width: 1366, height: layerHeight)

gradientLayer.colors = [UIColor(red: 16/255.0, green: 57/255.0, blue: 82/255.0, alpha: 1.0).cgColor, UIColor(red: 17/255.0, green: 132/255.0, blue: 157/255.0, alpha: 1.0).cgColor]

self.navigationController?.navigationBar.layer.addSublayer(gradientLayer)

Es ist nicht besser, nur eine andere Möglichkeit, das Gleiche zu tun.

0
Markus