iOS 13 introduit une nouvelle conception de modalPresentationStyle
.pageSheet
(et son frère .formSheet
) pour les contrôleurs de vue à présentation modale…
… Et nous pouvons ignorer ces feuilles en faisant glisser le contrôleur de vue présenté vers le bas (rejet interactif) . Bien que la nouvelle fonctionnalité "Pull-to-Ignorer" soit assez utile, elle n'est pas toujours souhaitable.
LA QUESTION: Comment désactiver le rejet interactif? - Gardez à l'esprit que nous gardons le même style de présentation.
ios
uiviewcontroller
uikit
modalviewcontroller
ios13
Jakub Truhlář
la source
la source
Réponses:
Option 1:
(Le
.pageSheet
renvoi interactif désactivé agit comme ceci.)UIViewController
contient une nouvelle propriété appeléeisModalInPresentation
qui doit être définie surtrue
pour empêcher le renvoi interactif..popover
etc.false
par défaut.Option 2:
UIAdaptivePresentationControllerDelegate
contient une nouvelle méthode appeléepresentationControllerShouldDismiss
.isModalInPresentation
propriété est définie surfalse
.la source
isModalInPresentation
sur le contrôleur de navigation ou sur les contrôleurs de vue individuels affichés dans la pile de navigation. Ce dernier vous permet de choisir écran par écran si le licenciement interactif est possible. Attention aux contrôleurs de recherche, ils ont priorité sur le contrôleur de vue individuel (mais pas sur le contrôleur de navigation). Plus d'informations dans mon article de blog: medium.com/@hacknicityviewController.modalInPresentation = YES;
UIImagePickerController
? Pour nous, il semble que leUIImagePickerController
soit l'ignorer et il peut donc être rejeté avec le geste de balayage. C'est peut-être un bogue iOS 13.presentationControllerShouldDismiss(_ presentationController: UIPresentationController)
renvoie false,presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController)
est appelé pour que vous puissiez faire des choses comme ajouter une boîte de dialogue de confirmation si l'utilisateur a entré des données.Si vous voulez le même comportement que dans la version précédente d'iOS (<iOS13) comme la présentation du modèle en plein écran, définissez simplement le style de présentation de votre contrôleur de vue de destination sur
UIModalPresentationStyle.fullScreen
Et si vous utilisez le storyboard, sélectionnez simplement le segua et sélectionnez dans
Full Screen
laPresentation
liste déroulante.Si vous souhaitez simplement désactiver le rejet interactif et conserver la nouvelle
UIViewController
propriété de jeu de style de présentationisModalInPresentation
surtrue
.la source
La propriété
isModalInPresentation
pourrait aider.De la documentation:
Vous pouvez l'utiliser comme ceci:
la source
Si vous utilisez des storyboards pour mettre en page votre interface utilisateur, j'ai trouvé que le meilleur moyen de désactiver ce rejet interactif lors de l'utilisation d'un contrôleur de navigation est de changer la présentation du contrôleur de navigation dans l'inspecteur d'attributs de automatique à plein écran. Tous les contrôleurs de vue de votre pile de navigation seront alors en plein écran et ne pourront pas être rejetés par l'utilisateur.
Inspecteur d'attributs montrant l'option de présentation pour le contrôleur de navigation
la source
Apple a partagé un exemple de code à ce sujet sur ce lien
Il utilise
isModalInPresentation
autant de suggestions d'utilisateurs.la source