Я вообще не понимаю, почему люди жалуются на то, что « Поля могут вызвать прямой сбой на чем-либо до iOS 8 ».
Настройка ваших ограничений по отношению к краю в файле XIb или раскадровки НЕ сделать ваше приложение аварии на iOS7, и он НЕ делает разницу UI на устройстве iOS7 ни, до тех пор , пока вы не коснуться UIView.layoutMargins
и UIView.preservesSuperviewLayoutMargins
свойства в вашем коде.
Что такое поля в iOS8?
Поля макета представляют собой заполнение внутренней части объекта, UIView
которое система макетов может использовать при разметке подпредставлений, чтобы обеспечить зазор между краем вида и подпредставлением. В этом отношении это очень похоже на свойство padding, связанное с блоками в CSS.
По умолчанию UIView
поля имеют по 8 точек на каждой стороне, и это нельзя изменить в Интерфейсном Разработчике . Однако, установив UIView.layoutMargins
свойство в коде, которое доступно только на iOS8, вы можете настроить эти значения.
Вы можете заставить IB отображать поля с помощью Editor> Canvas> Show Layout Rectangles:
Поля можно использовать для компоновки ваших просмотров и подпредставлений. Каждый из них UIView
поставляется с полями по умолчанию, но они влияют только на размещение представления, когда вы устанавливаете ограничение, связанное с полем.
Как использовать поля
Единственный способ использовать поля в Интерфейсном Разработчике - установить флажок Относительно поля при настройке ограничений. Вот как вы указываете ограничение « Использовать поля вместо краев» при разметке моего вида.
Давайте рассмотрим четыре различных способа установки ведущего ограничения между представлением и его подпредставлением. Для каждого ограничения, которое мы рассматриваем, первая описанная ассоциация будет ведущей в подпредставлении , а вторая будет ведущей в суперпредставлении . На что вы хотите обратить пристальное внимание, это проверить и снять статус опции Относительно к марже каждого конца ограничения, потому что это определяет, привязано ли ограничение к краю или к краю представления.
- Первый элемент (снимите отметку), второй элемент (отметьте): в этом случае мы объявляем, что левый край подпредставления должен совпадать с левым полем суперпредставления (как показано на этом изображении).
- Первый элемент (снять отметку), второй элемент (снять отметку): оба используют край, а не поле . В этом случае мы объявляем, что левый край подпредставления должен совпадать с левым краем суперпредставления.
- Первый элемент (отметьте), второй элемент (снимите отметку): в этом случае мы объявляем, что левое поле подпредставления должно совпадать с левым краем суперпредставления. Этот вид макета на самом деле заставляет подпредставление перекрывать суперпредставление.
- Первый пункт (проверка), второй пункт (проверка). На самом деле это имеет тот же эффект, что и в случае 2, так как подпредставление и суперпредставление имеют одинаковое поле по умолчанию. Мы заявляем, что левое поле подпредставления должно совпадать с левым полем суперпредставления.
Что хорошего в марже
Эта новая функция (iOS8) влияет только на разработку пользовательского интерфейса, если вы решите использовать поля.
Используя поля, вы можете настроить размещение нескольких подпредставлений, которые имеют общее отношение к общему суперпредставлению, изменив значение одного свойства. Это явная победа над установкой всех связанных ограничений с фиксированными значениями, потому что, если вам нужно обновить все интервалы, вместо изменения каждого значения по одному, вы можете одновременно изменить все релевантные места размещения, обновляя поле суперпредставления одной строкой код как этот:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
Чтобы проиллюстрировать это преимущество, в следующем случае все левые края всех подпредставлений выровнены по левому полю их суперпредставления. Таким образом, изменение левого поля суперпредставления повлияет на все подпредставления одновременно.