Ответ 1
Я вообще не понимаю, почему люди жалуются на то, что "Поля могут привести к краху на что-либо до iOS 8."
Установка ограничений относительно поля в файле xib или раскадровке НЕ ДЕЛАЕТ сделать ваш сбой приложения на iOS7, а НЕ сделать разницу в пользовательском интерфейсе на вашем устройстве iOS7 ни при условии, что вы не касаетесь свойств
UIView.layoutMargins
иUIView.preservesSuperviewLayoutMargins
в своем коде.
Что такое поля в iOS8
Поля макета представляют собой отступы вокруг интерьера UIView
, которые система компоновки может использовать при планировании подсмотров - для обеспечения того, чтобы промежуток оставался между краем представления и подвью. В этом отношении это очень похоже на свойство заполнения, связанное с блоками в CSS.
По умолчанию a UIView
имеет границы макета по 8 пунктов с каждой стороны, и это не может быть изменено в Конструкторе интерфейсов. Однако, установив свойство UIView.layoutMargins
в коде, которое доступно только на iOS8, вы можете настроить эти значения.
Вы можете получить IB для отображения полей с помощью Редактоp > Холст > Показать прямоугольники макета:
Поля могут использоваться для отображения макетов ваших представлений и подзонов. Каждые UIView
по умолчанию имеют поля, но они влияют только на размещение в представлении, когда вы устанавливаете ограничение, связанное с запасом.
Как использовать поля
Единственный способ использования полей в Interface Builder - проверить параметр Относительно поля при настройке ваших ограничений. Так вы направляете свое ограничение на использование полей, а не краев при выделении моего представления.
Давайте рассмотрим четыре разных способа настройки ведущего ограничения между представлением и его подвью. Для каждого ограничения мы рассмотрим описанную первую связанную ассоциацию, которая будет подвешенной ведущей, а второй будет отображаться ведущим. На что вы хотите обратить пристальное внимание - это проверить и снять отметку с статуса параметра Относительно поля для каждого ограничения, потому что это определяет, привязано ли ограничение к краю или краю представления.
- Первый элемент (снимите галочку), второй элемент (проверка): В этом случае мы объявляем, что левый край субвью должен выравниваться с левым полем просмотра (как показано на этом изображении).
- Первый элемент (снимите флажок), второй элемент (снимите галочку): оба с использованием края, не margin. В этом случае мы объявляем, что левая кромка subview должна выровняться по левому краю супервизора.
- Первый элемент (проверка), второй элемент (снимите галочку): В этом случае мы объявляем, что левый край подзаголовка должен быть выровнен по левому краю супервизора. Этот вид компоновки фактически делает subview перекрытием супервизора.
- Первый элемент (проверка), второй элемент (проверка). Это фактически имеет тот же эффект, что и в случае 2, поскольку оба subview и superview имеют одинаковый разброс по умолчанию. Мы объявляем, что левая маржа subview должна быть выровнена с левой границей.
Что хорошего в полях
Эта новая функция (iOS8) влияет только на развитие пользовательского интерфейса, если вы решите использовать поля.
Используя поля, вы можете настроить размещение нескольких подзонов, которые имеют общее отношение к общему виду, изменяя значение одного свойства. Это явная победа над установкой всех связанных ограничений с фиксированными значениями, потому что если вам нужно обновить все интервалы, вместо того чтобы менять каждое значение по одному, вы можете одновременно изменить все соответствующие места размещения, обновив маркер супервизора с помощью одной строки код, подобный этому:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
Чтобы проиллюстрировать это преимущество, в следующем случае все левые кромки subviews выровнены с их левым краем. Таким образом, изменение поля слева от просмотра будет влиять на все подпункты одновременно.