Je traverse la documentation et je semble toujours être sur un point de collage.
J'ai un objet de contrôleur d'affichage c_selectphoto. Cela a une vue sur le conteneur. À l'intérieur de la vue du conteneur, je souhaite le contrôleur d'affichage de l'enfant, c_selectphotocontrolview, pour s'adapter à l'intérieur. Ce sera juste un éventail de photos. Cependant, régler le cadre et ajouter le contrôleur de vue enfant ne fonctionne pas. Si je déplace la valeur X du contrôleur d'affichage enfant souhaité, aucun effet ne se produit. P>
Pour comprendre ce qui se passe sur i couleur codé tout. Le conteneur, en dessous, est orange. La vue Le conteneur s'attend à ce que le storyboard soit jaune. La vue que je veux réellement aller là-bas est rouge. P>
Voici le storyboard: p>
p>
voici mon code de contrôleur pour c_selectphoto p> Toutefois, le résultat produit est ci-dessous:
p> Premièrement, la classe jaune ne doit pas être ajoutée du tout, Je ne voulais que le rouge (la classe Uicollectionviewcontroller). Deuxièmement, je peux dire que la classe rouge est en train d'être ajoutée au mauvais endroit car sa valeur x n'a pas été déplacée du tout. P> Donc, ma question est la suivante:
Comment puis-je ajouter un UIContagerViewController, en tant qu'enfant au contrôleur d'affichage principal, c_selectphoto, mais que le cadre UicontagerViewController est adapté au conteneur que j'ai dans le contrôleur d'affichage principal? P> Merci !!! P> Remarque: Les vues que j'essayent d'ajouter sont UicollectionViewControlers. Lorsque j'ajoute un UIViewController, le cadrage fonctionne tout simplement bien, mais comme vous pouvez le constater lors de l'ajout de l'uicollectionviewControlers, le cadrage ne fonctionne pas, et ils sont ajoutés à des compensations aléatoires et ne respectant pas mes tentatives de taille avec des assignations de trame. < / p> p>
3 Réponses :
Si vous voulez que le contrôleur rouge soit le contrôleur enfant, supprimez le jaune et faites-la glisser-glisser du conteneur vers le contrôleur rouge. Il n'est pas nécessaire de l'ajouter en code ou de redimensionner. Le contrôleur rouge sera réglé sur la même taille que le conteneur dans le storyboard. P>
Je remarque que la taille Uicollectionview ne respecte pas le cadre que je suis défini. Si je fixais son cadre sur (0,0 50h50) lorsque je vérifie son cadre dans la vue ViewDidAppear, sa sortez comme (0,0 768,960)! Si j'utilise un UIViewController générique, ce problème ne se produit pas
@Aggressor, ne pose aucun cadre. Il devrait avoir la même taille que le conteneur sans aucun code. Assurez-vous de donner la vue du conteneur quelles que soient les contraintes nécessaires pour lui donner la taille souhaitée.
Au bas du contrôleur dans le storyboard, je vois que "Intégrer la Segue à" nom du contrôleur ". Savez-vous comment je peux ajouter ces temps que je veux? Je l'ai supprimé par accident et je n'arrive pas à le créer de le recréer
@Aggressor, vous contrôlez Faites glisser de la vue du conteneur sur le contrôleur que vous souhaitez intégrer, comme je l'ai dit dans ma réponse.
Cela décrit comment je me sens en ce moment grâce à vous: YouTube.com/watch?v=k4jwvicl0yu a>
Stackoverflow.com/Questtions/25404484/...
Utilisez l'extension suivante pour l'ajout d'enfantViewController à la vue
extension UIViewController { func configureChildViewController(childController: UIViewController, onView: UIView?) { var holderView = self.view if let onView = onView { holderView = onView } addChildViewController(childController) holderView.addSubview(childController.view) constrainViewEqual(holderView, view: childController.view) childController.didMoveToParentViewController(self) childController.willMoveToParentViewController(self) } func constrainViewEqual(holderView: UIView, view: UIView) { view.translatesAutoresizingMaskIntoConstraints = false //pin 100 points from the top of the super let pinTop = NSLayoutConstraint(item: view, attribute: .Top, relatedBy: .Equal, toItem: holderView, attribute: .Top, multiplier: 1.0, constant: 0) let pinBottom = NSLayoutConstraint(item: view, attribute: .Bottom, relatedBy: .Equal, toItem: holderView, attribute: .Bottom, multiplier: 1.0, constant: 0) let pinLeft = NSLayoutConstraint(item: view, attribute: .Left, relatedBy: .Equal, toItem: holderView, attribute: .Left, multiplier: 1.0, constant: 0) let pinRight = NSLayoutConstraint(item: view, attribute: .Right, relatedBy: .Equal, toItem: holderView, attribute: .Right, multiplier: 1.0, constant: 0) holderView.addConstraints([pinTop, pinBottom, pinLeft, pinRight]) }}
Après beaucoup de frustration avec le même problème (contrôlant spécifiquement la taille / l'emplacement d'un contrôleur de vue enfant contrôlant une uicollectionview) je suis tombé sur cette solution. Cela a parfaitement fonctionné, y compris lors de la rotation du périphérique. Up voté. Une seule mise à jour mineure requise: ".top", ".bottom", ".left" et ".right" et ".right" ont changé à un moment donné à tous les minuscules: ".top", ".bottom", ". et gauche"
Vous pouvez et devez également appeler enfilcontroller.willmoveToparentViewController (auto) code>
2 choses - 1, addchildvievoller (_:) code> appels
willmove (ToparentViewController :) code> pour vous ( développeur.apple.com/library/content/careréArticles/... ). 2, si vous allez appeler
Willsomething () code> et
Didsomethile () code>, assurez-vous que la méthode
Willsomething () code> est une méthode
() code> méthode.
mis à jour pour Swift 5 + P>
Une seule ligne dans votre contrôleur d'affichage pour ajouter un contrôleur de vue enfant. p>
méthodes super évolutives dans l'extension si vous souhaitez l'ajouter sur une vue personnalisée. p>
xxx pré> Comment utiliser: strong> P>
Ajout: strong> dans le contrôleur d'affichage où vous souhaitez ajouter le contrôleur de la vue enfant. P> yourChildViewController.remove()