Actualmente, no, no parece que sea posible centrar una vista en la supervista usando solo VFL. Sin embargo, no es tan difícil hacerlo usando una sola cadena VFL y una sola restricción adicional (por eje):
VFL: "|-(>=20)-[view]-(>=20)-|"
[NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:view.superview
attribute:NSLayoutAttributeCenterX
multiplier:1.f constant:0.f];
Uno podría pensar que simplemente sería capaz de hacer esto (que es lo que inicialmente pensé e intenté cuando vi esta pregunta):
[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
metrics:nil
views:@{@"view" : view}];
Intenté muchas variaciones diferentes de lo anterior tratando de doblarlo a mi voluntad, pero esto no parece aplicarse a la supervista incluso cuando explícitamente tiene dos cadenas VFL separadas para ambos ejes ( H:|V:
). Entonces empecé a tratar de aislar exactamente cuando las opciones no obtener aplicado a la VFL. Parecen no aplicarse a la supervista en el VFL y solo se aplicarán a las vistas explícitas que se mencionan en la cadena de VFL (lo que es decepcionante en ciertos casos).
Espero que en el futuro Apple agregue algún tipo de nueva opción para que las opciones de VFL tengan en cuenta la supervista, incluso si lo hacen solo cuando solo hay una vista explícita aparte de la supervista en la VFL. Otra solución podría ser otra opción pasada en el VFL que dice algo como: NSLayoutFormatOptionIncludeSuperview
.
No hace falta decir que aprendí mucho sobre VFL tratando de responder esta pregunta.