web-dev-qa-db-fra.com

Nouvelle présentation modale iOS 13: le contrôleur de présentation ne descend pas

J'ai un comportement étrange lors de la présentation modale d'UIViewControllers dans iOS 13. Le nouveau style de présentation que j'ai vu sur iOS 13 ressemble à ceci:

Le contrôleur de vue présenté apparaît derrière le contrôleur de vue présenté. Il est également décalé vers le bas pour imiter une "pile"

The presenting view controller appears behind the presented view controller. It is also shifted down to mimic a "stack"

Pendant ce temps, lorsque je présente des contrôleurs de vue via mon application, j'obtiens toujours cet effet:

Le contrôleur de vue de présentation ne bouge pas du tout lors de la présentation d'un nouveau contrôleur de vue

The presenting view controller doesn't move at all when presenting a new view controller

J'utilise ce code pour présenter ce contrôleur de vue:

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

Voici ma question: Je me demande pourquoi cela se produit et s'il existe un moyen de présenter les contrôleurs de vue dans le style iOS 13 normal (avec le présentant le contrôleur de vue reculant).

Merci d'avance!

11
CentrumGuy

Il s'avère que le problème était ma hiérarchie de contrôleur de vue. J'ai pu y remédier en faisant du contrôleur de vue de présentation le contrôleur de vue racine de mon application. J'ai d'abord défini le contrôleur d'arrière-plan comme contrôleur de vue racine en appelant

window.rootViewController = self

puis en utilisant mon code précédent

let controller = storyboard?.instantiateViewController(withIdentifier: "tutorial") as! TutorialController
controller.modalPresentationStyle = .pageSheet
controller.modalTransitionStyle = .coverVertical
present(controller, animated: true, completion: nil)

J'ai présenté le contrôleur de vue. Merci à tous ceux qui ont essayé d'aider!

2
CentrumGuy

Je pense que le problème peut être résolu en utilisant vc.modalPresentationStyle = .fullScreen s'il n'y a pas UINavigationController, sinon vous pouvez utiliser ces codes comme suit:

let navigationController = UINavigationController(rootViewController: vc) 
navigationController.modalPresentationStyle = .fullScreen 
present(vc, animated: true)

car avec iOS 13, il s'agit d'une nouvelle fonctionnalité qui Apple a changé le style de présentation par défaut des contrôleurs de vue en une feuille modale en plein écran dans iOS 12

Par programme:

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)

Du storyboard:

enter image description here

C'est tout. Pas besoin de jouer avec le contrôleur racine ou la fenêtre.

Pour référence, visitez cet article .

0
iBug

Nous pouvons le changer dans la barre d'outils de l'inspecteur. Pour y parvenir: dirigez-vous vers la cinquième section de la barre de contrôle de l'inspecteur, puis modifiez le champ Présentation en plein écran.

0
Navin Dogiparthi

Cela devrait être la seule propriété que vous devez définir

presentedViewController.modalPresentationStyle = .automatic

Détaillé dans https://developer.Apple.com/videos/play/wwdc2019/224/

0
glotcha