141 votes

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:

autolayout blues

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?..

193voto

Fyodor Volchyok Points 31

Un autre storyboard solution:

Set height equality constraint

Maintenant:

Edit constraint's multiplier

Le PROFIT!!!

Result

175voto

Firo Points 4788

Il est maintenant possible de l'IB [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. Ensuite, sélectionnez la contrainte et accédez à l' Attribute inspecteur:

Demonstration of steps above

Ensuite, vous pouvez régler le multiplicateur. Si vous voulez, c'est 50% de la super vue sur la laisser à l' 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)

Demonstration of second step above

31voto

Mete Points 381

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:

- (void) viewWillAppear:(BOOL)animated
{

    NSLayoutConstraint *constrain = [NSLayoutConstraint constraintWithItem:upperview
                                                                 attribute:NSLayoutAttributeHeight 
                                                                 relatedBy:0 
                                                                    toItem:self.view
                                                                 attribute:NSLayoutAttributeHeight
                                                                multiplier:.5 
                                                                  constant:0];
    [self.view addConstraint:constrain];

}

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 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)???

7voto

brainray Points 2554

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).

    [self.view addConstraints:[NSLayoutConstraint
        constraintsWithVisualFormat:@"V:[topLayoutGuide]-0-[_view1]-0-[_view2(==_view1)]-0-[bottomLayoutGuide]"
                            options:0
                            metrics:nil
                              views:viewsDict]];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X