Как бы я указал это простое центрирование NSLayoutConstraint, используя форму, вдохновленную ASCI-артом?

У меня есть простое ограничение, которое я бы предпочел указать, используя формат, вдохновленный Asci-art, однако я не могу найти пример этого.

NSLayoutConstraint *centerXConstraint = [NSLayoutConstraint constraintWithItem: childView
                                             attribute:NSLayoutAttributeCenterX
                                             relatedBy:NSLayoutRelationEqual
                                                toItem: parentView
                                             attribute:NSLayoutAttributeCenterX
                                            multiplier:1.0f
                                              constant:0.0f]

Я пробовал несколько вещей, таких как '|-[childView]-|' но это только заставляет его X точек слева от его родителя.


person 1dayitwillmake    schedule 13.11.2012    source источник


Ответы (2)


Вы не можете, в принципе. Визуальный формат довольно ограничен в том, чего он может достичь, и все сложное либо не работает, либо приближается к уровням стиля регулярных выражений «написать один раз, никогда не понять снова». Это нормально для размещения групп элементов, которые должны поддерживать расстояние между собой, но для чего-либо еще это того не стоит.

Это единственное ограничение, и код, который у вас уже есть, выполняет правильную работу. Я бы придерживался этого.

Если вы часто используете ограничения, стоит использовать категорию в UIView, чтобы упростить общие создания, поскольку существующий код довольно многословен.

person jrturton    schedule 13.11.2012
comment
Не то, что я надеялся услышать, хе-хе, но краткий и конкретный ответ. - person 1dayitwillmake; 14.11.2012

Этого можно добиться с помощью языка Visual Format.

Один из способов сделать это описан в этом ответе: https://stackoverflow.com/a/14917695/1072846

Еще один способ сделать это — использовать «распорные представления», как описано в разделе Создание равного интервала между представлениями документа Руководство по автоматической компоновке.

Ваш VFL будет выглядеть так:

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(viewToCenter, spacerView1, spacerView2);

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[spacerView1(=>1)][viewToCenter][spacerView2(=>1)]|" options:0 metrics:nil views:viewsDictionary]`

Предполагая, что intrinsicContentSize viewToCenter установлен.

person Eric    schedule 27.02.2014