Obecnie nie, nie wygląda na to, aby można było wyśrodkować widok w superviewie używając tylko VFL. Nie jest to jednak trudne do zrobienia przy użyciu pojedynczego ciągu VFL i jednego dodatkowego ograniczenia (na oś):
VFL: "|-(>=20)-[view]-(>=20)-|"
[NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:view.superview
attribute:NSLayoutAttributeCenterX
multiplier:1.f constant:0.f];
Można by pomyśleć, że po prostu byłbyś w stanie to zrobić (o czym początkowo myślałem i próbowałem, gdy zobaczyłem to pytanie):
[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
metrics:nil
views:@{@"view" : view}];
Próbowałem wielu różnych wariantów powyższego, próbując nagiąć to do mojej woli, ale wydaje się, że nie ma to zastosowania do superwizji, nawet jeśli jawnie mam dwa oddzielne ciągi VFL dla obu osi ( H:|V:
). I wtedy zaczął próbować izolować kiedy dokładnie opcje mają się stosować do VFL. Wydaje się, że nie mają one zastosowania do superviewu w VFL i będą miały zastosowanie tylko do wszelkich wyraźnych poglądów, które są wymienione w ciągu VFL (co jest rozczarowujące w niektórych przypadkach).
Mam nadzieję, że w przyszłości Apple doda jakąś nową opcję, aby opcje VFL uwzględniały superview, nawet jeśli robią to tylko wtedy, gdy istnieje tylko jeden wyraźny widok oprócz superview w VFL. Innym rozwiązaniem mogłoby być innej opcji przeszedł do VFL, który mówi coś takiego: NSLayoutFormatOptionIncludeSuperview
.
Nie trzeba dodawać, że wiele się nauczyłem o VFL, próbując odpowiedzieć na to pytanie.