ios Ajouter un UIView par-dessus tout, même la barre de navigation
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!
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)
Dalef excellente solution dans swift:
self.navigationController?.view.addSubview(view)
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!
[[UIApplication sharedApplication].windows.lastObject addSubview:myView];
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()
}