Я работаю с autolayout и ограничениями и обнаружил, что Constrain to margins
в Xcode 6 есть опция, которой нет в Xcode 5 и проверена по умолчанию.
Я создал тестовый проект, затем добавил элемент UITableView
ViewController с размером кадра, равным размеру представления, и добавил ограничения
Xcode 6 Здесь вы можете увидеть, хотя tableview имеет тот же фрейм, что и view. Xcode предлагает добавить -16 в качестве ограничения, тогда как Xcode 5 предлагает добавить интервал 0.
Теперь, когда вы снимите флажок «Constrain to margin», он будет вести себя так же, как Xcode 5, и предложит добавить 0 в качестве ограничения
Кроме того, я обнаружил, что как только я добавляю ограничение с помощью Constrain к марке проверено, я больше не могу открыть файл раскадровки в Xcode 5, поэтому это определенно что-то новое в Xcode 6
Надеюсь, я смогу правильно объяснить свой вопрос. Я хотел бы понять, что на самом деле делает «Ограничение маржи» и когда я должен и не должен его использовать. Я прошу прощения, если это что-то очень простое и очевидное.
РЕДАКТИРОВАТЬ
Я нашел кое-что о полях макета в обсуждении здесь , интересно, связано ли это с этим.
источник
Ответы:
Я вообще не понимаю, почему люди жалуются на то, что « Поля могут вызвать прямой сбой на чем-либо до iOS 8 ».
Что такое поля в iOS8?
Поля макета представляют собой заполнение внутренней части объекта,
UIView
которое система макетов может использовать при разметке подпредставлений, чтобы обеспечить зазор между краем вида и подпредставлением. В этом отношении это очень похоже на свойство padding, связанное с блоками в CSS.По умолчанию
UIView
поля имеют по 8 точек на каждой стороне, и это нельзя изменить в Интерфейсном Разработчике . Однако, установивUIView.layoutMargins
свойство в коде, которое доступно только на iOS8, вы можете настроить эти значения.Поля можно использовать для компоновки ваших просмотров и подпредставлений. Каждый из них
UIView
поставляется с полями по умолчанию, но они влияют только на размещение представления, когда вы устанавливаете ограничение, связанное с полем.Как использовать поля
Единственный способ использовать поля в Интерфейсном Разработчике - установить флажок Относительно поля при настройке ограничений. Вот как вы указываете ограничение « Использовать поля вместо краев» при разметке моего вида.
Давайте рассмотрим четыре различных способа установки ведущего ограничения между представлением и его подпредставлением. Для каждого ограничения, которое мы рассматриваем, первая описанная ассоциация будет ведущей в подпредставлении , а вторая будет ведущей в суперпредставлении . На что вы хотите обратить пристальное внимание, это проверить и снять статус опции Относительно к марже каждого конца ограничения, потому что это определяет, привязано ли ограничение к краю или к краю представления.
Что хорошего в марже
Эта новая функция (iOS8) влияет только на разработку пользовательского интерфейса, если вы решите использовать поля.
Используя поля, вы можете настроить размещение нескольких подпредставлений, которые имеют общее отношение к общему суперпредставлению, изменив значение одного свойства. Это явная победа над установкой всех связанных ограничений с фиксированными значениями, потому что, если вам нужно обновить все интервалы, вместо изменения каждого значения по одному, вы можете одновременно изменить все релевантные места размещения, обновляя поле суперпредставления одной строкой код как этот:
Чтобы проиллюстрировать это преимущество, в следующем случае все левые края всех подпредставлений выровнены по левому полю их суперпредставления. Таким образом, изменение левого поля суперпредставления повлияет на все подпредставления одновременно.
источник
В iOS 8 у вас теперь есть возможность определить свои ограничения относительно предопределенного поля для границ суперпредставления вместо самих границ суперпредставления. Да, это полностью связано с полями макета, на которые вы указали в документах. Одним из преимуществ является то, что вы можете переопределять свои поля динамически или по-разному для каждого типа устройства, и макет будет обновляться соответствующим образом без изменения ограничений.
Когда его использовать: когда вы хотите воспользоваться этой новой гибкостью.
Когда НЕ использовать: для любого приложения, предназначенного для запуска на iOS 7 или ниже.
источник
Свойство на UIView является:
layoutMargins
. Смотрите Apple Docs . В основном, если поля макета равны 8,8,8,8 (по умолчанию), ограничение с 0, ведущее к пробелу контейнера, будет иметь позицию x, равную 8. Обратите внимание, что это доступно только в iOS8 или новее.Для всех, кто не хочет, чтобы их ограничения переходили на поле контейнера:
CTRL + щелчок + перетаскивание, чтобы отобразить всплывающее окно создания ограничения.
Если меню показывает создание ограничения для поля по умолчанию, удерживайте параметр / alt, чтобы разрешить наложение ограничения на контейнер, а не на поле контейнера.
Теперь он покажет возможность создания ограничения НЕ на полях. Это намного быстрее в моем использовании.
источник