2012-08-30 5 views
8

J'ai une plume avec le mode autolayout activé contenant les vues d'un contrôleur de vue et, séparément, une fenêtre avec un espace réservé pour les ajouter. L'espace réservé a des contraintes par rapport à sa vue d'ensemble et d'autres vues dans la fenêtre, et avant d'impliquer mon contrôleur de vue, j'ai l'espace réservé de redimensionner avec la fenêtre comme je le veux. Plus tard, je charge la plume et ajoute sa vue de niveau supérieur en tant que subview de l'espace réservé, et je crée également manuellement des contraintes pour le garder aligné sur les bords de l'espace réservé.Autolayout redimensionne ma fenêtre

Tout va bien, et j'utilise ce modèle dans plusieurs cas dans mon application, mais dans certains cas, après avoir ajouté la vue, ma fenêtre est redimensionnée! Il rétrécit à la taille minimale pour l'affichage ajouté au lieu de l'agrandissement de la vue à la taille actuelle de la fenêtre. Jusqu'ici, la seule façon que j'ai trouvé pour éviter cela est que lors de l'ajout de la vue et de la création de ses contraintes, de définir aussi le cadre de la vue pour lui donner la taille initiale de l'espace réservé et de la fenêtre. C'est correct de temps en temps, mais je veux être capable de définir des contraintes qui sont plus compliquées et qui consistent simplement à aligner chaque arête avec un aperçu de l'espace réservé. Je ne veux pas coder l'arithmétique de trame pour chacun de ces cas.

Est-ce que quelqu'un sait ce qui se passe? Si la fenêtre dicte déjà la taille de mon espace réservé, et non l'inverse, que dois-je faire lors de l'ajout de la sous-vue pour que la taille de la fenêtre actuelle prenne toujours le pas? J'ai vu le menu pop-up dans les fenêtres IB de Xcode qui semble concerner uniquement les sous-vues, mais aussi superview (défini sur le premier pour toutes mes plumes), que se passe-t-il avec cette fonctionnalité? Je n'ai encore rien trouvé à ce sujet.

+0

pas Pouvez-vous définir une contrainte sur la largeur de la vue personnalisée (espace réservé)? – codingFriend1

+1

J'ai édité mon post pour le rendre plus clair, j'espère. Mon espace réservé a déjà des contraintes pour lui donner le bon comportement lors du redimensionnement de la fenêtre. L'ajout de contraintes de taille fixe lors de l'ajout de la sous-vue casserait cela. –

+0

Si vos contraintes sont correctes, le redimensionnement de la fenêtre fonctionnerait. –

Répondre

9

Vous souhaitez définir la priorité de la résistance à la compression sur une valeur inférieure à NSLayoutPriorityWindowSizeStayPut, soit 500. Cela signifie que la taille de la fenêtre est prioritaire sur la taille de la vue.

Vous pouvez définir ceci à partir de l'inspecteur de taille IB.

Compression resistance priority

Ou vous pouvez le configurer par programme avec -[NSView setContentCompressionResistancePriority:forOrientation:]

+0

Il semble juste que c'est une question prioritaire. Toutefois, dans le cas où cela a provoqué cette publication, la fenêtre était plus grande que celle requise par la sous-vue ajoutée. La sous-vue n'aurait pas été compressée, mais plutôt étendue (le problème était qu'elle ne se développait pas mais que la fenêtre rétrécissait). Cela signifie-t-il que la priorité de la résistance à la compression n'entrerait pas en jeu? La priorité Content Hugging doit-elle également être réglée sur <500, ou suis-je confus? (Je travaille sur la mise en page automatique depuis presque un an et je trouve toujours difficile de visualiser l'objectif de ces deux ensembles de priorités). –

+0

oui, vous avez raison, la priorité d'étreinte du contenu devrait être <500 à la place.La priorité de la résistance à la compression est utilisée lors de l'élaboration de la vue qui devrait réduire lors de la réduction de l'espace, et le contenu étreignant lors de l'augmentation de l'espace. Avec la fenêtre reste la priorité de 500, alors tout <500 signifie que la taille de la fenêtre gagne,> 500 la vue gagne – iain

Questions connexes