Colocación de UIView para cubrir TabBar y NavBar

Estoy tratando de hacer una window emergente ( UIView ) con un background transparente (otra UIView ). Todo está funcionando bien para la 'window emergente UIView ' pero no pude descubrir cómo llevar 'background transparente UIView ' (arriba de la barra de navigation y TabBar).

Primero creé la UIView en el Storyboard y conecté la salida:

 popupView.center = CGPointMake(CGRectGetMidX(self.view.bounds), tableView.center.y); self.view.addSubview(popupView) popupView.clipsToBounds = true popupView.alpha = 0 

Luego, mientras visualizo popupView , estoy creando el background transparente UIView:

  func clicked() { self.popupView.alpha = 1 let screenSize: CGRect = UIScreen.mainScreen().bounds let opaqueView = UIView() opaqueView.frame.size = CGSize(width: screenSize.width, height: screenSize.height) opaqueView.backgroundColor = UIColor.blackColor() opaqueView.alpha = 0.5 self.view.addSubview(opaqueView) } 

Sin embargo, la vista de background no pasa por la barra de navigation ni TabBar. Probé esto pero nada cambia:

 myTabBar.view.bringSubviewToFront(opaqueView) 

Lo que quiero lograr es que, al tener una popup UIView en el frente, tener opaque UIView sobre todo, incluyendo NavBar y TabBar, pero detrás de la popup UIView


Actualizar:

Con respecto a la respuesta de @ Alex, con este trozo, logré mostrar opaqueView sobre TabBar y NavBar; pero ahora también va por encima de popupView.

 func display() { popupView.center = CGPointMake(CGRectGetMidX(self.view.bounds), tableView.center.y); self.view.addSubview(popupView) popupView.clipsToBounds = true let opaqueView = UIView() let screenSize: CGRect = UIScreen.mainScreen().bounds opaqueView.frame.size = CGSize(width: screenSize.width, height: screenSize.height) UIApplication.shanetworkingApplication().keyWindow!.insertSubview(opaqueView, belowSubview: popupView) } 

¿Cómo puedo colocar opaqueView debajo de popupView mientras opaqueView está por encima de todo lo demás?

Prueba esto:

 UIApplication.shanetworkingApplication().keyWindow!.bringSubviewToFront(opaqueView) 
  func addButtonTapped(){ if self.transparentBackground == nil{ self.transparentBackground = UIView(frame: UIScreen.main.bounds) self.transparentBackground.backgroundColor = UIColor(white: 0.0, alpha: 0.54) UIApplication.shanetworking.keyWindow!.addSubview(self.transparentBackground) self.opaqueView = self.setupOpaqueView() self.transparentBackground.addSubview(opaqueView) UIApplication.shanetworking.keyWindow!.bringSubview(toFront: self.transparentBackground) self.view.bringSubview(toFront: transparentBackground) } } func setupOpaqueView() -> UIView{ let mainView = UIView(frame: CGRect(x: 16, y: 100, width: Int(UIScreen.main.bounds.width-32), height: 200)) mainView.backgroundColor = UIColor.white let titleLabel = UILabel(frame: CGRect(x: 16, y: 20, width: Int(mainView.frame.width-32), height: 100)) titleLabel.text = "This is the opaque" titleLabel.textAlignment = .center titleLabel.font = font titleLabel.textColor = UIColor(white: 0.0, alpha: 0.54) mainView.addSubview(titleLabel) let OKbutton = UIButton(frame: CGRect(x: 16, y: Int(mainView.frame.height-60), width: Int(mainView.frame.width-32), height: 45)) OKbutton.backgroundColor = UIColor(networking: 40.0 / 255.0, green: 187.0 / 255.0, blue: 187.0 / 255.0, alpha: 1) OKbutton.layer.cornerRadius = 10 mainView.addSubview(OKbutton) OKbutton.setTitle("OK", for: .normal) OKbutton.setTitleColor(UIColor.white, for: .normal) OKbutton.titleLabel?.font = font OKbutton.addTarget(self, action: #selector(FirstViewController.handleOKButtonTapped(_:)), for: .touchUpInside) return mainView } func handleOKButtonTapped(_ sender: UIButton){ UIView.animate(withDuration: 0.3, animations: { self.transparentBackground.alpha = 0 }) { done in self.transparentBackground.removeFromSuperview() self.transparentBackground = nil } } 

vista previa del resultado

La vista que desea hacer transparente, use esto

yourView.backgroundColor = UIColor.black.withAlphaComponent (0.7)