Атрибут Недоступно предупреждение в версиях iOS до 8.0

Что вызывает это предупреждение в построителе интерфейса?

Атрибут недоступен Атрибуты компоновки относительно поля макета в версиях iOS до 8.0.

Я использую бета-версию XCode 6. Предупреждения указывают на строки в источнике xml, которые не относятся к атрибутам.

Ответ 1

Поскольку я уже создал ограничения, ответом было нажать на ограничение, а затем заглянуть в панель "Утилиты" (справа). Как показано на рисунке ниже, нажмите на элемент, а затем убедитесь, что флажок "относительно поля" не установлен.

Relative to margin screenshot

Ответ 2

Когда вы добавляете ограничения в Xcode 6, у вас есть опция "Constrain to margins", которые создают другое ограничение и не могут быть прочитаны, например, в Xcode 5. Создайте ограничения без этих параметров, и предупреждения должны исчезнуть. Эти ограничения будут доступны на iOS 8.

enter image description here

Если вы уже создали ограничения, мы можем изменить его, нажав на ограничение и отредактировать его. При выборе второго элемента вы можете снять флажок "Относительно поля" (как объяснено в ответе GLee.

Ответ 3

Если вы не можете найти, откуда приходит предупреждение, вы можете использовать этот grep, чтобы найти его.

Запустите это в терминале в каталоге проекта:

grep -C 6 -nr Margin .

В 6 говорится, сколько строк контекста должно отображаться до и после матча.

Ответ 4

Согласно Гасперу Коленку, открытие раскадровки в качестве исходного кода очень полезно. Вот немного больше информации из моего опыта, фиксирующего эту проблему:

  • В исходном коде раскадровки найдите "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) в инспекторе идентификации.

  • После обнаружения проверяйте ограничения, чтобы найти тот, который необходимо удалить и воссоздать, без выбора параметра ограничения на поля (используйте константу = "в качестве подсказки".

Ответ 5

В моем случае мне пришлось снять флажок "Использовать автоматическую компоновку" из моей раскадровки в "Инспекторе файлов" и переделать все ограничения в моем приложении, старый способ с уменьшением/увеличением красного прямоугольника.

Классы классов уже были отключены, а целью является IOS 7.1.

Но хорошо подумайте, если у вас слишком много View Controllers и уже сделали все ваши ограничения. Когда вы отключите автоматическую компоновку, Xcode очищает все автоматические ограничения и возвращается к старой модели. Затем вам нужно снова выполнить всю работу.

Это был единственный способ избавиться от предупреждения Attribute Unavailable.