Ответ 1
Поскольку я уже создал ограничения, ответом было нажать на ограничение, а затем заглянуть в панель "Утилиты" (справа). Как показано на рисунке ниже, нажмите на элемент, а затем убедитесь, что флажок "относительно поля" не установлен.
Что вызывает это предупреждение в построителе интерфейса?
Атрибут недоступен Атрибуты компоновки относительно поля макета в версиях iOS до 8.0.
Я использую бета-версию XCode 6. Предупреждения указывают на строки в источнике xml, которые не относятся к атрибутам.
Поскольку я уже создал ограничения, ответом было нажать на ограничение, а затем заглянуть в панель "Утилиты" (справа). Как показано на рисунке ниже, нажмите на элемент, а затем убедитесь, что флажок "относительно поля" не установлен.
Когда вы добавляете ограничения в Xcode 6, у вас есть опция "Constrain to margins", которые создают другое ограничение и не могут быть прочитаны, например, в Xcode 5. Создайте ограничения без этих параметров, и предупреждения должны исчезнуть. Эти ограничения будут доступны на iOS 8.
Если вы уже создали ограничения, мы можем изменить его, нажав на ограничение и отредактировать его. При выборе второго элемента вы можете снять флажок "Относительно поля" (как объяснено в ответе GLee.
Если вы не можете найти, откуда приходит предупреждение, вы можете использовать этот grep, чтобы найти его.
Запустите это в терминале в каталоге проекта:
grep -C 6 -nr Margin .
В 6 говорится, сколько строк контекста должно отображаться до и после матча.
Согласно Гасперу Коленку, открытие раскадровки в качестве исходного кода очень полезно. Вот немного больше информации из моего опыта, фиксирующего эту проблему:
В исходном коде раскадровки найдите "margin". Вы увидите такую строку.
ограничение firstAttribute = "trailingMargin" secondItem = "Pgb-8w-IHT" secondAttribute = "trailing" constant = "8" id = "nKP-uZ-7Xm" /
Найдите идентификатор одного из атрибутов (Pgb-8w-IHT в приведенном выше примере).
Прокрутите вверх, чтобы найти, в каком объекте принадлежит это ограничение. Что-то вроде:
tableViewCell contentMode = "scaleToFill" selectionStyle = "default"
Вернитесь к просмотру раскадровки и покажите окно инспектора удостоверений.
Найдите в подзаголовках объекта, который вы обнаружили выше, чтобы найти идентификатор (Pgb-8w-IHT) в инспекторе идентификации.
После обнаружения проверяйте ограничения, чтобы найти тот, который необходимо удалить и воссоздать, без выбора параметра ограничения на поля (используйте константу = "в качестве подсказки".
В моем случае мне пришлось снять флажок "Использовать автоматическую компоновку" из моей раскадровки в "Инспекторе файлов" и переделать все ограничения в моем приложении, старый способ с уменьшением/увеличением красного прямоугольника.
Классы классов уже были отключены, а целью является IOS 7.1.
Но хорошо подумайте, если у вас слишком много View Controllers и уже сделали все ваши ограничения. Когда вы отключите автоматическую компоновку, Xcode очищает все автоматические ограничения и возвращается к старой модели. Затем вам нужно снова выполнить всю работу.
Это был единственный способ избавиться от предупреждения Attribute Unavailable.