2017-10-04 6 views
0

J'ai un RootViewController qui se compose de deux UIViewControllers tous créés en code (sans Storyboard/Nibs).UIPageViewController avec mise en page automatique ne met pas à jour la trame enfant jusqu'à ce que viewDidAppear

Le premier UIViewController a les points d'ancrage suivants:

weekView.translatesAutoresizingMaskIntoConstraints = false 

weekView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
weekView.heightAnchor.constraint(equalToConstant: 100).isActive = true 
weekView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
weekView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 

L'autre UIViewController a les points d'ancrage suivants:

daysViewController.view.translatesAutoresizingMaskIntoConstraints = false 

daysViewController.view.topAnchor.constraint(equalTo: weekView.bottomAnchor).isActive = true 
daysViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 
daysViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true 
daysViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true 

ce qui en fait épingler au fond du premier UIViewController et prend le reste de la hauteur de l'écran (-100 depuis le premier UIViewController).

Le second UIViewController est un UIPageViewController personnalisé qui consiste en plusieurs vues enfants de UIViewControllers.

Le problème

Pour une raison quelconque lorsque vous faites défiler les pages du UIPageViewController chaque enfant ViewController a la hauteur du cadre incorrect (pas la même par exemple hauteur que la contrainte lui disent avoir). La hauteur du cadre est à la place la même que la hauteur de l'écran.

La hauteur de cadre imprimé dans les trois états différents sont les suivants:

viewDidLoad PageViewController frame: (0.0, 0.0, 375.0, 667.0) 
viewDidLoad ChildViewController frame: (0.0, 0.0, 375.0, 667.0) 
viewWillAppear ChildViewController frame: (0.0, 0.0, 375.0, 667.0) 
viewDidAppear ChildViewController frame: (0.0, 0.0, 375.0, 667.0) 

J'ai besoin de la taille d'image correcte de 567 dans le viewDidLoad à la mise en page des sous-vues correctement et pas si tard dans le viewDidAppear.

Comment puis-je résoudre ce problème? Parce que maintenant je dois prendre en compte que le cadre des vues est la pleine hauteur de l'écran au lieu de la 567 il devrait être lors de la création de toutes les sous-vues.

Répondre

0

trouvé ma réponse dans un similar question

Nous avons dû faire avec le moteur et la mise en page automatique au démarrage. Le cadre est correct entre viewWillAppear et viewDidAppear ce qui m'a fait mettre le code spécifique à l'image dans viewDidLayoutSubviews. Cependant, si les tâches spécifiques à l'image appelées dans viewDidLayoutSubviews sont lourdes (par exemple liées à l'interface utilisateur), il y aura un décalage/scintillement dans le défilement.