se sont récemment lancés dans la mise en œuvre automatique et je suis coincé sur ce qui semble être un exemple de problème vraiment trivial. Je pense que je veux m'asseoir en haut de l'écran et occuper la moitié de la hauteur de l'écran. Simple avant la mise en page automatique - fixez-le simplement en place et dites-lui de s'étendre verticalement lorsque la super-vue est redimensionnée.
Maintenant, je ne peux pas pour la vie de moi voir comment faire. Voici ce que j'obtiens lorsque j'essaye de configurer ceci:
La contrainte d'espace du bas est définie sur "égale 284", ce qui est absolu et absolument inutile pour moi lorsque je passe à la disposition iPhone4, car elle garde 284 points d'espace en bas de l'écran et réduit la vue pour ne plus être la moitié de la taille de l'écran. Et il n'y a aucun moyen de définir cette contrainte pour qu'elle corresponde à une fraction de la hauteur d'une autre vue.
Après avoir lutté pendant un certain temps, la seule façon pour moi de le faire serait d'introduire une autre vue sous cette vue, d'épingler leurs hauteurs de manière égale, de les asseoir au-dessus et en dessous de l'autre, puis de définir la deuxième vue (du bas) pour qu'elle soit invisible. .. ce qui semble un peu moche!
Est-ce que je rate quelque chose d'évident? ..
la source
Réponses:
Ceci est désormais possible dans IB à partir de [au moins] Xcode 5.1.1. Bien qu'il m'ait fallu du temps pour comprendre que c'est en fait super simple:
Commencez par créer une contrainte d'alignement du haut de base (vous devrez également définir des contraintes de bas, de gauche et de droite, comme d'habitude). Sélectionnez ensuite la contrainte et accédez à l' inspecteur d' attributs :
Ensuite, vous pouvez ajuster le multiplicateur. Si vous le souhaitez, 50% de la super vue, laissez-le
1
, car il est aligné par le centre du super. C'est également un excellent moyen de créer des vues qui sont également d'autres pourcentages (comme 25% de super vue)la source
First Item
n'estView.Top
pas le casView.Center Y
. Sinon, oui, cela ne fera que le centrer. Vous devrez également vous assurer que les autres contraintes sont correctement définies pour gérer les autres arêtes de la vue.Solution de storyboard où vous pouvez définir le rapport exact entre toutes les vues:
Maintenant:
PROFIT!!!
PS Notez également que cette méthode fonctionne avec des vues sur différents niveaux d'imbrication et (évidemment) applicable pour la largeur
PPS parfois, il peut être utile «d'inverser le premier et le deuxième élément» de la contrainte ou de définir un multiplicateur inverse (par exemple 2 au lieu de 0,5) (mais ces méthodes ne sont pas utiles si vous ne comprenez pas comment les vues sont liées entre elles).
la source
Après un peu plus de temps, j'ai proposé ce qui suit.
Je le note comme une réponse mais ce n'est pas très satisfaisant, car cela suppose que vous ne pouvez pas réellement le faire dans Interface Builder, mais la contrainte correcte peut être ajoutée dans le code par la suite comme:
Fondamentalement, il définit un multiplicateur de 0,5 par rapport à la hauteur de self.view, agissant sur upperview. J'ai dû définir la priorité de la contrainte d'espace vertical inférieur dans IB à moins de 1000 pour éviter également un tas de messages d'exécution sur la rupture des contraintes.
Donc, si quelqu'un peut montrer comment faire cela dans Interface Builder, cela répondrait mieux à ma question, sinon je suppose que c'est aussi bon que possible (pour le moment) ???
la source
Légèrement plus facile et plus simple que la méthode que la réponse de Fyodor Volchyok. -Maintenez le bouton de contrôle enfoncé et cliquez sur la sous-vue. -Tout en maintenant le bouton de commande enfoncé, faites glisser le curseur sur la vue supervisée puis cliquez sur la vue supervisée. -Sélectionnez "Rapport hauteur / largeur".
-Puis cliquez sur l'inspecteur de taille. -Ensuite, double-cliquez sur la contrainte.
-Assurez-vous que "hauteur" est sélectionné pour les deux éléments.
-Ensuite, changez le "Multiplicateur" à 0,5 pour la moitié de l'écran, ou quelle que soit la fraction de la vue que vous désirez.
la source
Il y a aussi une autre possibilité dans le code au cas où vous auriez 2 vues qui devraient toutes deux avoir la même hauteur: réglez simplement la hauteur de view2 à la hauteur de view1 (l'astuce ici n'est pas de définir explicitement la hauteur de view1).
la source
Version rapide de la réponse de Mete:
la source