161 votes

Une vue dans son superview à l’aide du langage de Format visuel de centrage

J’ai juste commencé à apprendre la mise en forme automatique pour iOS et jeté un oeil au langage visuel de Format.

TI tous fonctionne très bien sauf pour une chose : je ne peux pas obtenir une vue vers le centre dans son superview.
Est-ce possible avec le VFL ou je dois créer manuellement une contrainte moi-même ?

232voto

larsacus Points 4024

Actuellement, non, il ne regarde pas comme il est possible pour centre un point de vue dans le superview en utilisant seulement le VFL. Il est, cependant, pas si difficile de le faire en utilisant un seul VFL chaîne et une seule contrainte supplémentaire (par axe):

VFL: "|-(>=20)-[view]-(>=20)-|"

[NSLayoutConstraint constraintWithItem:view
                             attribute:NSLayoutAttributeCenterX
                             relatedBy:NSLayoutRelationEqual
                                toItem:view.superview
                             attribute:NSLayoutAttributeCenterX
                            multiplier:1.f constant:0.f];

On pourrait croire que vous devez simplement être en mesure de le faire (c'est ce que j'ai d'abord pensé et essayé quand j'ai vu cette question):

[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
                                 options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
                                 metrics:nil
                                   views:@{@"view" : view}];

J'ai essayé beaucoup de différentes variations de ce qui précède essayer de la plier à ma volonté, mais cela ne semble pas s'appliquer à la superview, même lorsqu'il est explicitement avoir deux VFL chaînes pour les deux axes (H:|V:). J'ai alors commencé à essayer de l'isoler exactement quand les options ne appliquée pour le VFL. Ils semblent ne pas s'appliquer à la superview dans le VFL et ne s'appliquent à toute explicite des points de vue qui sont mentionnés dans le VFL chaîne (qui est décevant dans certains cas).

J'espère que dans le futur Apple ajoute une sorte de nouvelle option pour avoir le VFL options de tenir compte de la superview, même si le faire seulement quand il y a une seule explicite d'ailleurs le superview dans le VFL. Une autre solution pourrait être une autre option est passé dans le VFL qui dit quelque chose comme: NSLayoutFormatOptionIncludeSuperview.

Inutile de dire que j'ai beaucoup appris sur le VFL essayer de répondre à cette question.

139voto

Evgeny Points 2765

Oui, il est possible de centrer une vue dans son superview avec langage Format visuel. Aussi bien verticalement qu’horizontalement. Voici la démo :

https://github.com/evgenyneu/Center-VfL

83voto

jqgsninimo Points 438

Je pense qu’il est préférable de créer manuellement les contraintes.

1voto

Tobi Points 3303

Je sais que ce n’est pas envie que vous voulez, mais vous pouvez bien sûr calculer les marges et les utiliser pour créer la chaîne de format visuel  ;)

De toute façon, aucun. Malheureusement il n’est pas possible de le faire « automatiquement » avec VFL - du moins ne pas encore.

-3voto

leenyburger Points 58

Au lieu d’utiliser le VFL, vous pouvez facilement le faire dans interface builder. Dans la grande table de montage séquentiel, Ctrl -cliquez sur la vue, vous voulez centrer. Faites glisser vers la superview (tout en maintenant la touche ctrl) et sélectionnez « Centre X » ou « Centre Y ». Sans nécessiter de code.

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