0

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é!

Répondre

0

Je pense que je l'ai compris. Je vais créer un protocole de délégué qui spécifie une fonction qui indique au contrôleur de vue de conteneur de créer la contrainte de largeur et j'appelle cette méthode dans addSubview de la vue de conteneur.