В настоящее время нет, не похоже, что можно центрировать вид в суперпредставлении, используя только VFL. Однако это не так сложно сделать, используя одну строку VFL и одно дополнительное ограничение (на ось):
VFL: "|-(>=20)-[view]-(>=20)-|"
[NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:view.superview
attribute:NSLayoutAttributeCenterX
multiplier:1.f constant:0.f];
Можно подумать, что вы просто сможете сделать это (это то, что я изначально думал и пытался, когда я увидел этот вопрос):
[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=20)-[view(==200)]-(>=20)-|"
options: NSLayoutFormatAlignAllCenterX | NSLayoutFormatAlignAllCenterY
metrics:nil
views:@{@"view" : view}];
Я пробовал много разных вариантов вышеописанного, пытаясь подчинить его своей воле, но, похоже, это не относится к суперпредставлению, даже если явно иметь две отдельные строки VFL для обеих осей ( H:|V:
). Затем я начал , чтобы попытаться изолировать точно , когда варианты действительно получить применяется к ЛВЖ. По-видимому, они не применяются к суперпредставлению в VFL и будут применяться только к любым явным представлениям, упомянутым в строке VFL (что в некоторых случаях вызывает разочарование).
Я надеюсь, что в будущем Apple добавит какую-то новую опцию, чтобы опции VFL учитывали суперпредставление, даже если это делается только тогда, когда существует только одно явное представление помимо суперпредставления в VFL. Другим решением может быть другой вариант принят в VFL , что говорит что - то вроде: NSLayoutFormatOptionIncludeSuperview
.
Излишне говорить, что я многое узнал о VFL, пытаясь ответить на этот вопрос.