Écran noir après la présentation de modal-vue-contrôleur dans le contexte actuel de UITabBarController
Ma racine-vue-contrôleur est un UITabBarController. Je suis en train de présenter un modal-vue-contrôleur sur une de la barre d'onglets du contrôleur de la vue des contrôleurs, mais encore de permettre la barre d'onglet à être utilisé pour passer à un autre onglet - en d'autres termes, je voudrais que le modal seulement d'interruption de l'écoulement de l'onglet, pas la totalité de l'app.
Pour ce faire, j'ai mis la présentation de la vue du contrôleur de style de présentation que "Plus de Contexte Actuel" table de montage séquentiel. Le problème, je vais avoir, c'est qu'après avoir présenté le modèle-vue-contrôleur et en sélectionnant un nouvel onglet, la présentation de la vue du contrôleur de vue est supprimée de la fenêtre, et n'est pas ajouté à la fenêtre lors du rejet de la vue-contrôleur. Après avoir rejeté le point de vue du contrôleur, passer à un autre onglet et ensuite revenir met enfin la présentation de-vue-contrôleur de retour dans la fenêtre.
J'ai reproduit mon problème à l'aide de l'Onglet modèle dans Xcode.
Après la présentation de modal - j'ai ajouté de la transparence à la vue-contrôleur de voir facilement ce qui se passe dans la vue-contrôleur.
Changer de deuxième onglet et puis de nouveau - la présentation de la vue du contrôleur de point de vue a été supprimée.
Rejetant le modal quitte la présentation de view controller avec vue encore retiré de la fenêtre. Aller à l'onglet 2 et le retour ajoute de la vue arrière de la fenêtre.
J'espère que c'est quelque chose de simple, j'ai négligé dans le storyboard, mais le fait que je peux présenter le modal et voir la vue-contrôleur derrière elle avant de changer les onglets me fait penser que j'ai des choses à configurer correctement.
- Pouvez-vous expliquer pourquoi vous voulez donc cela? Normalement, un modal-vue-contrôleur dans ce contexte il pourrait être utilisé pour effectuer certaines actions liées à cet onglet, et doit être rejetée tandis que toujours dans cet onglet. Si vous avez vraiment besoin de ce point de vue (celui que vous êtes modal présentant) à rester visible, vous pouvez utiliser une manette de navigation comme la racine pour que l'onglet, et de faire un coup de pouce à la place.
- Merci de poster le code que vous utilisez pour présenter ainsi que fermer la modale viewController
- Il consiste à effectuer une action liée à cet onglet, exactement comme vous l'avez mentionné. Chaque onglet est séparée des flux de travail - le modal interrompt le flux de travail de l'onglet, mais son tout à fait correct pour l'utilisateur d'aller sur un autre onglet et afficher des informations sans rapport avec la languette montrant les modal.
- il est présenté par un storyboard modale des enchaînements. Son juste rejeté avec
[self dismissViewControllerAnimated:true completion:nil]
- Essayez de supprimer la séquence de déclenchement du storyboard et de l'appeler par code à la place.
- Avez-vous trouvé la solution?
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et a pu le résoudre par la mise en
self.definesPresentationContext = YES;
sur la présentation de-vue-contrôleur avant de présenter le modal VC. Vous pouvez également définir ce dans un storyboard, la case à cocher est appelée "Définit le Contexte dans Interface Builder.Essayez de définir votre style de présentation que "Sur Plein Écran" au lieu de "Plus de Contexte Actuel" table de montage séquentiel.
iOS 10+ & Swift 3+
J'ai de très belle solution de ce problème. De l'utilisation, de plus en plein écran modal style de présentation pour un view controller, qui est présenté.
Sur plein écran, votre point de vue contrôleur sur votre tabbar (contrôleur) en la couvrant. Ainsi, l'utilisateur final ne peut pas passer tabbar (sauf si vous effectuez l'opération par programmation) tabbar éléments. L'utilisateur doit fermer cette vue de contrôleur de commutateur de tabbar.
Si vous utilisez des enchaînements, à présent view controller puis cliquez Sur Plein Écran " de modal style de présentation dans l'Attribut d'inspection
Essayer de présenter le point de vue du contrôleur dans la fenêtre de l'application. J'ai eu un problème similaire qui a été fixé par le code ci-dessous:
Espère que cela vous aide aussi.
j'ai eu ce problème : lorsque je présente mon ModalController il prend arrière-plan transparent et quand j'ai changé l'onglet suivant dans tabBarController et getBack à la précédente à l'arrière-plan transparent a disparu et il n'y a un mauvais fond noir après recherche, j'ai trouvé le point le point est ceci:
auto.definesPresentationContext = true
de soi n'est pas modale contrôleur de soi, c'est que la présentation de contrôleur pour modalController et un autre point est .overCurrentContext comme ce
** self.definesPresentationContext = true **
modalController.modalPresentationStyle = .overCurrentContext
self.present(modalController, animated: true, completion: nil)
J'ai reproduit votre problème et trouvé une solution.
Elle n'implique pas de modification de la séquence de la méthode ou la modification de certains attributs dans la table de montage séquentiel.
Suggestion:
Mais avant d'aller à la solution, je voudrais ajouter que le but de modal présenté viewcontrollers est à distrupt le débit réel de l'application et de présenter certains supplémentaire de l'information contextuelle ou certaines informations contenu pour la présentation de la vc. Suffit de mettre, il est très logique et effectivement recommandé de couvrir la barre d'onglet, lors de la présentation d'une vue contrôleur modal. Il y a beaucoup de bons exemples de cela dans l'app store.
Avoir dit qu'ici c'est une solution que je propose.
Solution:
Je crois que le problème réside dans la façon UITabBarController poignées de son point de vue de la hiérarchie.
Ce que j'ai fait a été explicitement rejeter le modal présenté-vue-contrôleur avant de l'onglet a été changé. Ce qui fait que la présentation de-vue-contrôleur de persister dans la vue de la hiérarchie de l'UITabBarViewController avant de la barre d'onglet commutateurs à nouvel onglet.
Dans le "viewWillDisappear" méthode de votre modal présenté ViewController ajouter ce.
Avoir un problème similaire avec mon onglet contrôleur, cependant, comme dans les commentaires, je suggérer de changer la séquence à une poussée ou un spectacle segue. Cela permettra que l'onglet de rester en contact avec la nouvelle vue affiche en lieu et place de l'ancien point de vue lors de la commutation à d'autres onglets. Si l'esthétique est une question que vous pouvez personnaliser un manette de navigation afin de personnaliser l'apparence de la nouvelle vue.
J'ai le même problème en vivent actuellement swift projet. J'ai fait la solution de contournement sur que.
Puis, finalement, j'ai utilisé
NSNotificationCenter
et de rejeter ce point de vue contrôleur lorsque l'onglet est modifiée afin de résoudre ce problème.J'ai référencé tabbar contrôleur dans
AppDelegate
et de l'ensemble de délégué.Et il est délégué
Puis-je ajouter de l'observateur dans mon présentés vue contrôleur
Et c'est un travail très bien pour moi. Pas une bonne solution je pense que pour rejeter la vue du contrôleur sur l'onglet événement de changement, mais il est ok pour faire disparaître plutôt que le noir de l'écran qui casse également la navigation de l'époque.