mise en page automatique - faire de hauteur de vue par rapport à la moitié superview hauteur
ont été d'entrer dans les mises en page automatiques récemment et je suis bloqué sur ce qui semble vraiment comme un banal problème d'exemple. J'ai vue que je veux m'asseoir en haut de l'écran, et de prendre la moitié de la hauteur d'écran. Simple avant mise en forme automatique - juste virer de bord en lieu et dites-lui de s'étendre verticalement lorsque le superview redimensionne.
Maintenant, je ne peux pas pour la vie de me voir comment le faire. Voici ce que j'obtiens quand j'essaie de le configurer:
Le bas de l'espace de contrainte est définie sur "équivaut à 284", qui est absolue et absolument inutile pour moi quand j'ai changer pour iPhone4 mise en page, car il se conserve 284 points de l'espace au bas de l'écran, et diminue la vue à plus de la moitié de la taille de l'écran. Et il n'y a aucun paramètre de contrainte à l'égal d'une fraction de tout autre point de vue en hauteur..
Après avoir lutté pendant un certain temps, la seule façon que je peux penser à faire ce serait d'introduire un autre point de vue au-dessous de ce point de vue, pin leurs hauteurs aussi, demandez-leur de s'asseoir dessus et au-dessous les uns des autres et puis définissez le second (en bas) pour être invisible.. ce qui semble un peu moche!
Ai-je raté quelque chose d'évident?..
- Je ne pense pas que c'est moche, mais une smart astuce pour obtenir ce que vous voulez à l'aide de l'IB. J'ai fait cela, et quand vous l'utiliser de façon appropriée les noms d'éléments, vous pouvez vous rendre clair ce qui se passe. Vous pouvez même avoir un troisième élément sur un autre poste, ou de centres, de changer la taille sur la base de ces deux sous-vues.
Vous devez vous connecter pour publier un commentaire.
C'est désormais possible au bureau international en sa qualité de [au moins] Xcode 5.1.1. Bien qu'il m'a fallu quelque temps pour comprendre qu'il est en fait super simple:
D'abord créer une base alignement en haut de la contrainte (vous devez également le programme d'installation en bas, de gauche, de droite et de contraintes, comme d'habitude)
. Ensuite, sélectionnez la contrainte et accédez à la Attribut inspecteur:
Ensuite, vous pouvez régler le multiplicateur. Si vous voulez, c'est 50% de la super vue de le laisser à
1
, car il est aligné par le super centre. C'est aussi un excellent moyen de créer des vues qui sont les autres pourcentages trop (comme 25% de super vue)First Item
estView.Top
pasView.Center Y
. Sinon, oui, il va juste centrer. Vous aurez également besoin de s'assurer que les autres contraintes sont définies correctement pour gérer le point de vue de l'autre bord.Storyboard solution où vous pouvez définir le rapport exact entre tout point de vue:
Maintenant:
PROFIT!!!
P. S. notez Également que cette méthode fonctionne avec des points de vue sur les différents niveaux d'imbrication et (évidemment) applicable pour la largeur
P. P. S. parfois, il peut être utile de "renverser le premier et le deuxième élément" de la contrainte ou inversée multiplicateur (pour l'exemple 2, au lieu de 0,5) (mais ces méthodes ne sont pas utiles si vous ne comprenez pas comment les points de vue se rapportent entre autres).
Après un peu plus de temps, je suis venu avec la suivante.
Je suis en notant comme une réponse, mais il n'est pas très satisfaisant, car il suppose que vous ne pouvez pas faire ça dans Interface Builder, mais la bonne contrainte peut être ajouté dans le code par la suite que:
Fondamentalement, il définit un multiplicateur de 0,5 à l'encontre de la hauteur de l'auto.vue, sur upperview.
Je devais définir la priorité de la partie inférieure de l'espace vertical contrainte de l'IB inférieur à 1000 pour éviter un tas d'exécution des messages à propos de briser les contraintes ainsi.
Donc si quelqu'un peut nous montrer comment faire cela dans Interface Builder, qui permettraient de mieux répondre à ma question, sinon, je suppose que c'est aussi bon qu'il obtient (pour l'instant)???
Un peu plus facile et plus simple que la méthode de Fiodor Volchyok de réponse.
-Maintenez le bouton de contrôle et cliquez sur la sous-vue.
-Toujours en appuyant sur le bouton de commande, faites glisser le curseur de la superview puis cliquez sur le superview.
-Sélectionnez "Aspect Ratio".
-Puis cliquez sur la Taille de l'Inspecteur.
-Puis double-cliquez sur la contrainte.
-Assurez-vous que la "hauteur" est sélectionné pour les deux objets.
-Puis changer le "Multiplicateur" de 0,5 pour la moitié de l'écran, ou quelle que soit la fraction de la superview que vous désirez.
Là, j'ai aussi une autre possibilité dans le code, dans le cas où vous avez 2 points de vue qui doivent avoir la même hauteur: il suffit de régler la hauteur de vue2 à la hauteur de vue1 (l'astuce ici est de ne pas le réglage de la hauteur de vue1 explicitement).
Swift version de Mete réponse: