Tocropviewcontroller: Ignorer les problèmes de transition (iOS 13)

Créé le 8 août 2019  ·  23Commentaires  ·  Source: TimOliver/TOCropViewController

J'ai rencontré un problème lors de la présentation du contrôleur de recadrage sur un contrôleur de navigation.

Lors de la fermeture du contrôleur de recadrage, à la fin de la transition, la vue du contrôleur de navigation est supprimée et n'est pas affichée... (se produit sur iPhone et iPad et uniquement sur iOS 13).

sans oublier que la navigation est toujours là et que l'interface utilisateur est "bloquée".

bug

Commentaire le plus utile

 func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
        //This code fails on iOS13.
        //cropViewController.dismiss(animated: true)

        let viewController = cropViewController.children.first!
        viewController.modalTransitionStyle = .coverVertical
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

Cette méthode fonctionne bien sur iOS 13.
Je ne sais pas pourquoi.

Je m'attends à ce que vous trouviez un meilleur moyen.

https://www.dropbox.com/s/wyzc8errinfap1f/TestCrop.zip?dl=0

Tous les 23 commentaires

@uchiaTziki Euh. Vous devrez peut-être me montrer, désolé! Pouvez-vous joindre une capture d'écran ?

captures d'écran jointes...

  1. présentation modale avec sélecteur d'image.
  2. image choisie
  3. contrôleur de culture actuel de cette cellule
  4. après l'annulation, le rejet fait disparaître le sélecteur d'images (et vous voyez le contrôleur de présentation initial - j'ai coloré le contrôleur en blanc)

J'espère que ça clarifie les choses..
1
2
3
4

Hmm, donc vous le présentez dans un autre contrôleur de vue présenté ?

Je me demande si ce code de rejet finit par rejeter le mauvais contrôleur de vue alors :

https://github.com/TimOliver/TOCropViewController/blob/8770be8407540f5873fe714870771cea8a382ac7/Objective-C/TOCropViewController/TOCropViewController.m#L895

Pouvez-vous s'il vous plaît essayer de changer le code et voir si vous pouvez trouver une combinaison qui le résout ?

Sans pouvoir le tester moi-même, je ne peux rien faire de mon côté. Désolé!

J'ai presque tout essayé, mais je vais réessayer..
Le contrôleur à l'arrière n'est pas rejeté.. sa vue est supprimée (ce qui est étrange).

Avez-vous essayé ces codes avant de présenter cropViewController ?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Essayé ce matin. Cela résout le bug mais l'animation est l'animation modale par défaut (de bas en haut).
L'animation spéciale de la vue/du cadre ne fonctionne pas avec cette solution

@uchiaTziki avez-vous trouvé un correctif ?

Est-ce reproductible du tout dans l'exemple d'application ? Si c'est le cas, je peux éventuellement y jeter un œil.

Le fonctionnement des présentations modales dans iOS 13 a changé par rapport aux versions précédentes d'iOS. Mais je n'ai pas encore eu l'occasion de déterminer exactement ce que nous devons faire pour mettre à jour le code pour cela.

Autant que je sache, cela ne fonctionne pas correctement lorsque vous avez les éléments suivants :

  • Le contrôleur de navigation (A) pousse un contrôleur de vue (B)
  • Le contrôleur de vue (B) présente le contrôleur de vue (C) comme feuille de formulaire
  • View Controller (C) présente CropViewController
  • Appuyez sur Annuler ou Terminé sur CropViewController et vous pourrez repérer le bogue.

Désolé j'étais en vacances.

Avez-vous essayé ces codes avant de présenter cropViewController ?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

L'utiliser ( @TimOliver ) dans la dernière version bêta de Xcode a fait l'affaire. Donc l'animation de transition fonctionne pour moi maintenant.

Cela a fonctionné pour moi aussi.

 func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
        //This code fails on iOS13.
        //cropViewController.dismiss(animated: true)

        let viewController = cropViewController.children.first!
        viewController.modalTransitionStyle = .coverVertical
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

Cette méthode fonctionne bien sur iOS 13.
Je ne sais pas pourquoi.

Je m'attends à ce que vous trouviez un meilleur moyen.

https://www.dropbox.com/s/wyzc8errinfap1f/TestCrop.zip?dl=0

Salut, je rencontre le bug sur iOS 13.1

si j'utilise
dismiss(animated: true, completion: nil)
sur iOS 13.1,

Tous les ViewController disparaissent.

crop

Je ne sais pas pourquoi.

J'ai juste dû définir cropViewController.modalTransitionStyle = .coverVertical comme solution de contournement car il n'utilise alors plus la transition personnalisée ...

Même chose que @oblq ici.

Avez-vous essayé ces codes avant de présenter cropViewController ?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

J'ai résolu mon problème, merci

si #disponible(iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
}

Merci. Cela a résolu mon problème sur iOS 13

après le recadrage de l'image, en rejetant le contrôleur de recadrage, à la fin de la transition, la vue du contrôleur de navigation est supprimée et n'est pas affichée

Sil te plait aide moi

après le recadrage de l'image, en rejetant le contrôleur de recadrage, à la fin de la transition, la vue du contrôleur de navigation est supprimée et n'est pas affichée

Sil te plait aide moi

Salut! Réglez simplement cropViewController.dismiss(animated: **false**, completion: nil) au lieu de cropViewController.dismiss(animated: **true**, completion: nil)

J'ai aussi essayé de résoudre ce problème. Comme le dit @ ibdman1991 , la désactivation de l'animation fonctionne mais cela a l'air mauvais. Je pense que supprimer le transitioningDelegate pourrait être une solution plus agréable, mais je ne sais pas à quel point cela aurait un impact.

    let cropViewController = CropViewController(image: image)
    cropViewController.modalTransitionStyle = .crossDissolve
    cropViewController.transitioningDelegate = nil

si #disponible(iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
}

Ce problème est résolu dans iOS 13 et supérieur Merci

si #disponible(iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
// cropViewController.modalTransitionStyle = .crossDissolve
cropViewController.transitioningDelegate = nil
}
Travailler pour moi

Euh. D'accord. Étant donné que définir explicitement le style de présentation en plein écran semblait le résoudre pour la majorité des gens, je ferme ceci. :)

Si vous avez un cas d'utilisation spécifique qui nécessite un style de présentation modal explicitement différent, veuillez ouvrir un nouveau problème et expliquer très soigneusement ce que vous essayez de faire. N'oubliez pas que s'il s'agit d'un bogue dans iOS 13, nous ne pouvons peut-être pas faire grand-chose ici.

Merci!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

felipebonezi picture felipebonezi  ·  6Commentaires

TimOliver picture TimOliver  ·  4Commentaires

piyushlodaliya picture piyushlodaliya  ·  3Commentaires

agusguerra10 picture agusguerra10  ·  5Commentaires

ojseven picture ojseven  ·  7Commentaires