J'essaie de créer un custom container view controller. Je veux utiliser la norme ViewControllerTransitioning pattern pour animer l'ajout de vues enfant, mais je suis un peu coincé. J'écris ce contrôleur de vue de conteneur complètement dans le code, car le nombre de contrôleurs de vue enfant peut varier.Quand créer des contraintes AutoLayout lors de l'utilisation du protocole UIViewControllerTransitioning
J'ai déjà regardé this tutorial et cela m'a beaucoup aidé, mais je n'arrive pas à comprendre cette étape.
Le flux d'ajouter un nouveau contrôleur de vue de l'enfant est actuellement comme ceci:
'MyContainerVc'.addNewSubViewController
Call UIViewController.addChildViewController
Create transitioning context
Fetch animator
Animate
'Container View'.addSubview
Create autolayout positioning/height constraints
Les contraintes de positionnement/hauteur peuvent être créés (et sont) dans la vue du conteneur, en tant que contrôleur de vue du conteneur n'a pas besoin pour les contrôler, mais la contrainte de largeur doit être créée dans le contrôleur de vue conteneur, car les vcs enfants peuvent spécifier un preferredContentSize.width
à mon conteneur vc. Le conteneur vc essaiera de respecter autant que possible les préférences des enfants vcs et d'en baser autant que possible les contraintes de largeur.
Je ne suis pas sûr quand la contrainte pour la largeur des sous-vues peut être créée. La contrainte doit être appliquée avant l'exécution de l'animation, car la largeur doit être définie avant l'affichage de la vue enfant. Cependant, je ne peux pas l'activer avant que la vue enfant ait été ajoutée en tant que sous-vue et si je l'active une fois l'animation terminée, la largeur n'est pas définie correctement pendant l'animation.
L'animateur ne doit utiliser que le transitioningContext
et utiliser la méthode addSubview
de la vue conteneur, car il devrait être indépendant du type de transition qu'il anime.
De même, crée les contraintes AutoLayout dans addSubview
la meilleure façon de procéder ou doit-elle être effectuée ailleurs, par ex. dans didAddSubview
?
Un conseil est très apprécié!