Je souhaite 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 en
UIViewController
dessous. - une
UIView
fenêtre 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'essaye 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
dessous disparaît et je perds mon effet de transparence.
N'importe quelle idée pour faire ça, je suis sûr que c'est assez simple ...
Merci!
ios
uiviewcontroller
uinavigationbar
popupwindow
Nicolas Roy
la source
la source
Réponses:
Vous pouvez le faire en ajoutant votre vue directement à keyWindow:
MISE À JOUR - Pour Swift 4.1 et supérieur
la source
[self.navigationController.view addSubview:overlayView];
c'est ce que tu veux vraimentla source
Voici une solution simple et élégante qui fonctionne pour moi. Vous pouvez définir la position z de la barre de navigation sous la vue:
N'oubliez pas de le remettre à 0 lorsque vous avez terminé.
la source
Versions Swift pour la réponse vérifiée:
Swift 4:
Swift 3.1:
la source
Ajoutez votre vue en tant que sous-vue de NavigationController.
Vous pouvez également l'ajouter sur la fenêtre:
J'espère que cela t'aides.. :)
la source
let navigationBar = viewController.navigationController!.navigationBar navigationBar.addSubview(coverView)
Excellente solution Dalef dans Swift:
la source
La réponse de @ Nam fonctionne très bien si vous souhaitez simplement afficher votre vue personnalisée, mais si votre vue personnalisée nécessite une interaction de l'utilisateur, vous devez désactiver l'interaction pour le
navigationBar
.Comme dit dans la réponse de Nam, n'oubliez pas d'inverser ces changements:
Vous pouvez le faire d'une meilleure manière avec une extension:
Et utilisez-le simplement comme ceci:
la source
Version Swift de la réponse de @Nicolas Bonnet:
N'oubliez pas que la fenêtre doit être une propriété forte, car la réponse d'origine conduit à une désallocation immédiate de la fenêtre
la source
Je vous recommande de créer une nouvelle UIWindow:
Ensuite, vous pouvez gérer votre vue dans un autre UIViewController. Pour supprimer les fenêtres:
espérons que cela aidera!
la source
Il y a plus d'une façon de le faire:
1- Ajoutez votre
UIView
surUIWindow
au lieu de l'ajouterUIViewController
. De cette façon, ce sera au-dessus de tout.2- Utilisez une transition personnalisée qui gardera votre UIViewController affiché à l'arrière avec un alpha de 0,5
Pour cela, je vous recommande de regarder ceci: https://github.com/Citrrus/BlurryModalSegue
la source
la source
Dans Swift 4.2 et Xcode 10
Dans l' objectif C
UIView * spinnerView; // Ceci est votre vue
Cela ne peut fonctionner qu'en mode Portrait OU Paysage.
Un autre code simple est:
la source
Notez que si vous souhaitez ajouter une vue en plein écran, utilisez uniquement le code ci-dessous
Ajoutez ces extensions de UIViewController
Continuer comme processus d'ajout normal de sous-vue
À utiliser maintenant dans l'ajout de viewDidAppear de UIViewController
la source
J'utiliserais une sous-classe UIViewController contenant une "vue de conteneur" qui incorpore vos autres contrôleurs de vue. Vous pourrez ensuite ajouter le contrôleur de navigation à l'intérieur de la vue Conteneur (en utilisant le segment de relation d'intégration par exemple).
Voir Implémentation d'un contrôleur de vue de conteneur
la source
Cette méthode fonctionne avec xcode 9.4, iOS 11.4
la source
la source
Vous devez ajouter une sous-vue à la première fenêtre avec le type UITextEffectsWindow. Pour le premier, parce que les claviers personnalisés ajoutent leur UITextEffectsWindow, et si vous y ajoutez une sous-vue, cela ne fonctionnera pas correctement. En outre, vous ne pouvez pas ajouter une sous-vue à la dernière fenêtre car le clavier, par exemple, est également une fenêtre et vous ne pouvez pas présenter à partir de la fenêtre du clavier. Donc, la meilleure solution que j'ai trouvée est d'ajouter une sous-vue (ou même un contrôleur de vue push) à la première fenêtre avec le type UITextEffectsWindow, cette fenêtre couvre la vue accessoire, la barre de navigation - tout.
la source