Add a UIView above all, even the navigation bar

Nicolas Roy picture Nicolas Roy · Feb 18, 2014 · Viewed 134.4k times · Source

I want to display, above any other views, even the navigation bar, a kind of "pop-up" view that looks like this:

  • full screen black background with a 0.5 alpha to see the other UIViewController underneath.
  • a UIView window in the middle with some information, (a calendar if you want to know everything).

To do that, I've created a UIViewController that contains the two UIViews (background and window), and I'm trying to display it. I've tried a simple [mySuperVC addSubview:myPopUpVC.view], but I still have the navigation bar above.

I've tried to present it as a modal, but the UIViewController underneath disappears, and I lose my transparency effect.

Any idea to do this, I'm sure it's quite simple...

Thanks!

Answer

Rom. picture Rom. · Feb 18, 2014

You can do that by adding your view directly to the keyWindow:

UIView *myView = /* <- Your custom view */;
UIWindow *currentWindow = [UIApplication sharedApplication].keyWindow;
[currentWindow addSubview:myView];

UPDATE -- For Swift 4.1 and above

let currentWindow: UIWindow? = UIApplication.shared.keyWindow
currentWindow?.addSubview(myView)

UPDATE for iOS13 and above

keyWindow is deprecated. You should use the following:

UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.addSubview(myView)