Comment redimensionner une UIView et la force de ses sous-vues pour redimensionner
J'ai un UIScrollView
avec un UIView
comme une sous-vue. Le UIView
a un tas de champs de saisie de données disposées verticalement - essentiellement juste un format fixe Formulaire de saisie de données.
Je veux garder la UIView's
taille verticale et ajuster sa taille horizontale en fonction de la taille de la UIScrollView
qui varie en fonction de l'orientation de l'appareil. À noter que c'est dans la vue de Détail d'un UISplitViewController
.
De sorte que l'utilisateur aura à faire défiler verticalement, mais pas horizontalement comme tous les champs de texte sur la UIView
devrait redimensionnées pour s'adapter à l'horizontale sur l'écran.
Actuellement si je redimensionner la UIView
en changeant la largeur de cadre pour correspondre à la UIScrollView's
largeur du châssis, puis le UIView
des sous-vues (les champs de texte) ne pas redimensionner eux-mêmes en fonction des contraintes d'installation de l'IB. Le UIView
semble juste pour être coupés. Il n'y a pas de défilement horizontal de sorte que cet aspect fonctionne correctement.
J'ai autoresize ensemble des sous-vues sur UIView
et sur UIScrollView
.
Des conseils sur les choses à faire ici ? Aussi où dois-je mettre le code pour redimensionner la UIView
si l'appareil changements d'orientation de l' ?
Des informations supplémentaires.
J'ai créé le UIView
de l'IB comme une vue séparée de la même PLUME que le DetailViewController
contenant le UIScrollView
. Parce qu'il est beaucoup plus grand que le UIScrollView
la seule façon que je peux trouver pour cela la création de l'IB est si je l'ai configuré comme une vue séparée de la hauteur et la largeur. J'ai ensuite créer un IBOutlet et ajouter ce point de vue comme une sous-vue de UIScrollView
dans le viewDidLoad
méthode. Tout cela semble fonctionner à trouver avec les points de vue de tous les afficher correctement, à l'exception de la UIView
des sous-vues ne sont pas redimensionnées à l'horizontale.
Toutes les suggestions sur ce que j'ai fait de mal ici?
- Quelles sont les contraintes d'installation? Cela devrait être faisable avec juste la mise en page automatique.
- Vous pense, mais clairement, je suis en manque de quelque chose. Comme Rakesh ci-dessous souligne les contraintes entre UISCrollView et UIView (son sous-vue) ne sont pas d'installation car UIView n'est pas à l'intérieur de UIScrollView de l'IB. J'ai pensé que je pourrais juste redimensionner la UIView par l'évolution de son cadre pour correspondre à la largeur de la UIScrollView mais la UIView ne pas redimensionner ses sous-vues si j'utilise simplement UIView.frame = newFrame.
- Peut-être que j'ai besoin de désactiver l'auto-mise en page que par Rakesh' commentaire ci-dessous. Je vais essayer ces suggestions et vous laisser savoir comment je vais.
- Rakesh et moi , les deux sont la même personne. 😀 de toute façon au lieu de définir le cadre manuellement (si vous allez de cette façon, vous devez utiliser le layoutSubviews à la position de la sous-vues aussi), pourquoi ne pas vous fixer le UIView également à l'aide de contraintes (par programmation) ou simplement utiliser des le autre façon que je l'ai mentionné dans la réponse?
- J'ai mis à jour la réponse à une autre option aussi. Check it out.
- OK j'ai eu travaille maintenant. J'ai tourné de mise en page automatique et un peu tout gâché parce qu'il faut tous être positionnée - c'est trop de travail. De le rallumer ensuite, j'ai trouvé que toutes les contraintes ont été supprimées. J'ai donc commencé par adjonction, à la viewDidLoad [self.le scrollView addSubview:auto.contentView]; self.le scrollView.contentSize = auto.contentView.cadre.taille; auto.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth; auto.contentView.autoresizesSubviews = OUI;
Vous devez vous connecter pour publier un commentaire.
Puisque vous aide à ne pas mettre la vue à l'intérieur de scrollview directement à partir de la xib, le bureau international ne fournit pas les options pour donner des contraintes qui n'a rien à voir avec superview. Vous pourriez avoir à ajouter des contraintes par programmation.Voir ici.
EDIT:
Également essayer d'utiliser le ci-dessous sur la vue (n'ai pas essayé, devrait fonctionner selon la documentation, mais vous ne savez pas avec l'auto-mise en page):
Ou si vous ne souhaitez pas utiliser la mise en page automatique à tous, alors le plus tôt méthode de configuration de la vue de développer (horizontal/vertical) dans la taille de l'inspecteur de faire. Pour cela, vous devez désactiver l'auto-layout. Sélectionnez xib-> Fichier Inspecteur -> Décocher auto-layout case
OK après plus de découverte, je pense avoir trouvé la bonne manière de faire ce que je suis en train de faire, alors j'ai pensé que je devrais laisser une note à ce sujet. Rappelez-vous que je suis en train de créer un formulaire avec défilement qui se redimensionne sa largeur, mais pas de sa hauteur, de sorte que l'utilisateur n'a qu'à défilement vers le haut et vers le bas pour accéder aux champs.
Maintenant ajouter une propriété de la ViewController.h fichier et de le connecter à la contentView largeur contraindre vous avez créé à 5) ci-dessus.
Enfin créer un viewDidLayoutSubviews méthode dans le ViewController et ajoutez le code suivant pour définir le contentView largeur d'être le même que le scrollView largeur.
Si les choses ne pas redimensionner correctement vérifiez toutes vos contraintes sont correctement définies. IB semble faire des choses qui semble étrange pour moi. Mais enfin, j'ai de travailler avec ce qui semble être le minimum de codage.
Vous pouvez également redimensionner verticalement de la même façon, tant que vous définissez la contrainte de priorité sur les sous-vues dans contentView être inférieur à 1 000. Également définir une supérieure ou égale à taille avec une haute priorité si vous ne voulez pas qu'il inférieurs à une certaine taille.
Si quelqu'un peut comprendre comment mettre de la contentView tel qu'il redimensionne sa largeur pour correspondre à la scrollView en utilisant uniquement de l'IB contraintes, j'aimerais savoir comment.