Establecer gradiente en la barra de navigation y en la barra de estado

Estoy intentando cambiar el background de una barra de navigation creando una capa y agregándola como una subcapa a la barra de navigation. Sin embargo, esto solo afecta a la barra de navigation.

1

No quiero que afecte a toda la parte superior de la pantalla. Código incluido:

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

La function createGradientLayerWithColors devuelve un CAGradientLayer para el marco dado.

¿Qué me estoy perdiendo? Gracias de antemano.

EDITAR:

Probé con Nathaniel, pero obtuve esto:

problema

Vale la pena mencionar que esto también es un TableView.

SOLUCIÓN:

Encontré esta pregunta que me ayudó a resolver el problema.

El código final correcto es:

 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.shanetworking.statusBarFrame.width, height: UIApplication.shanetworking.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!) } 

    Así es como lo gestiono.

    Primero, establezco la barra de navigation en transparente:

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

    Luego agrego el degradado a la vista detrás de la barra de estado y la barra de navigation:

      let gradient = CAGradientLayer() gradient.frame = CGRect(x: 0, y: 0, width: UIApplication.shanetworkingApplication().statusBarFrame.width, height: UIApplication.shanetworkingApplication().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