Визуальный язык формата
Это приложение показывает, как использовать Автоматическое Расположение визуальный язык формата для указания общих ограничений, включая стандартный интервал и размерности, вертикальный макет и ограничения с различными приоритетами. Кроме того, это приложение содержит полную языковую грамматику.
Визуальный синтаксис формата
Следующее является примерами ограничений, можно указать использование визуального формата. Отметьте, как текст визуально соответствует изображение.
- Стандартное пространство
[button]-[textField]
- Ограничение ширины
[button(>=50)]
- Соединение с суперпредставлением
|-50-[purpleBox]-50-|
- Вертикальный макет
V:[topField]-10-[bottomField]
- Представления сброса
[maroonView][blueView]
- Приоритет
[button(100@20)]
- Равные ширины
[button1(==button2)]
- Многократные предикаты
[flexibleButton(>=70,<=100)]
- Полная строка расположения
|-[find]-[findNext]-[findField(>=20)]-|
Нотация предпочитает хорошую визуализацию по полноте expressibility. Большинство ограничений, которые полезны в интерфейсах реального пользователя, может быть выражено с помощью визуального синтаксиса формата, но существуют некоторые, которые не могут. Одно полезное ограничение, которое не может быть выражено, является фиксированным форматным соотношением (например, imageView.width = 2 * imageView.height
). Для создания такого ограничения необходимо использовать constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
.
Визуальная грамматика строки формата
Визуальная грамматика строки формата определяется следующим образом (литералы показаны в code font
; e обозначает пустую строку).
Символ | Заменяющее правило |
---|---|
<visualFormatString> | (<ориентация> :)? (<суперпредставление> <соединение>)? <представление> (<соединение> <представление>) * (<соединение> <суперпредставление>)? |
<ориентация> |
|
<суперпредставление> |
|
<представление> |
|
<соединение> | e | |
<predicateList> | <simplePredicate> | <predicateListWithParens> |
<simplePredicate> | <metricName> | <positiveNumber> |
<predicateListWithParens> |
|
<предикат> | (<отношение>)? (<objectOfPredicate>) ( |
<отношение> |
|
<objectOfPredicate> | <постоянный> | <viewName> (см. примечание), |
<приоритет> | <metricName> | <число> |
<постоянный> | <metricName> | <число> |
<viewName> | Проанализированный как идентификатор C. Это должно быть ключом, отображающимся на экземпляр |
<metricName> | Проанализированный как идентификатор C. Это должно быть ключом, отображающимся на экземпляр |
<число> | Как проанализировано |
Если Вы делаете синтаксическую ошибку, исключение выдается с сообщением диагностики. Например:
Expected ':' after 'V' to specify vertical arrangement |
V|[backgroundBox]| |
^ |
A predicate on a view's thickness must end with ')' and the view must end with ']' |
|[whiteBox1][blackBox4(blackWidth][redBox]| |
^ |
Unable to find view with name blackBox |
|[whiteBox2][blackBox] |
^ |
Unknown relation. Must be ==, >=, or <= |
V:|[blackBox4(>30)]| |
^ |