Atualmente, não, não parece possível centralizar uma visualização na superview usando apenas VFL. No entanto, não é tão difícil fazê-lo usando uma única string VFL e uma única restrição extra (por eixo):
VFL: "|-(>=20)-[view]-(>=20)-|"
[NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:view.superview
attribute:NSLayoutAttributeCenterX
multiplier:1.f constant:0.f];
Alguém poderia pensar que você seria capaz de fazer isso (que é o que eu inicialmente pensei e tentei quando vi essa pergunta):
[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
metrics:nil
views:@{@"view" : view}];
Tentei muitas variações diferentes das anteriores, tentando dobrá-las à minha vontade, mas isso não parece se aplicar à superview, mesmo quando há explicitamente duas seqüências de caracteres VFL separadas para os dois eixos ( H:|V:
). Comecei a tentar isolar exatamente quando as opções não são aplicadas para o VFL. Eles parecem não se aplicar à superview no VFL e somente se aplicam a quaisquer visualizações explícitas mencionadas na string VFL (o que é decepcionante em certos casos).
Espero que, no futuro, a Apple adicione algum tipo de nova opção para que as opções do VFL levem em conta a superview, mesmo que apenas quando houver apenas uma única exibição explícita além da superview no VFL. Outra solução poderia ser outra opção passado para o VFL que diz algo como: NSLayoutFormatOptionIncludeSuperview
.
Desnecessário dizer que aprendi muito sobre o VFL tentando responder a essa pergunta.