[ios] Ajouter un UIView par-dessus tout, même la barre de navigation



5 Answers

[self.navigationController.view addSubview:overlayView]; est ce que tu veux vraiment

Question

Je veux afficher, au-dessus de toutes les autres vues, même la barre de navigation, une sorte de vue "pop-up" qui ressemble à ceci:

  • fond noir plein écran avec un alpha de 0,5 pour voir l'autre UIViewController dessous.
  • une fenêtre UIView au milieu avec quelques informations, (un calendrier si vous voulez tout savoir).

Pour ce faire, j'ai créé un UIViewController qui contient les deux UIViews (arrière-plan et fenêtre), et j'essaie de l'afficher. J'ai essayé un simple [mySuperVC addSubview:myPopUpVC.view] , mais j'ai toujours la barre de navigation ci-dessus.

J'ai essayé de le présenter comme un modal, mais le UIViewController disparaît et je perds mon effet de transparence.

Toute idée de le faire, je suis sûr que c'est assez simple ...

Merci!




Je vous recommande de créer une nouvelle UIWindow:

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
window.rootViewController = viewController;
window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
window.opaque = NO;
window.windowLevel = UIWindowLevelCFShareCircle;
window.backgroundColor = [UIColor clearColor];

[window makeKeyAndVisible];

Ensuite, vous pouvez gérer votre vue dans un autre UIViewController. Pour enlever les fenêtres:

[window removeFromSuperview];
window = nil;

espère que cela aidera!




Dalef excellente solution dans swift:

self.navigationController?.view.addSubview(view)



Notez que si vous voulez ajouter une vue en plein écran, utilisez uniquement le code ci-dessous

Ajoutez ces extensions de UIViewController

public extension UIViewController {
   internal func makeViewAsFullScreen() {
      var viewFrame:CGRect = self.view.frame
      if viewFrame.origin.y > 0 || viewFrame.origin.x > 0 {
        self.view.frame = UIScreen.main.bounds
      }
   }
}

Continuer comme processus d'ajout normal de sous-vue

Maintenant, utilisez en ajoutant viewDidAppear de UIViewController

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

     self.makeViewAsFullScreen()
}



Versions rapides pour la réponse vérifiée:

Swift 4:

let newView = UIView()
UIApplication.shared.keyWindow?.addSubview(newView)

Swift 3.1:

let newView = UIView()
UIApplication.sharedApplication().keyWindow?.addSubview(newView)



[[UIApplication sharedApplication].windows.lastObject addSubview:myView];





Related