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

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

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

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


person GLee    schedule 12.08.2014    source источник


Ответы (5)


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

Относительно снимка экрана с полями

person GLee    schedule 15.08.2014
comment
см. комментарий № 3 @Matt-Gibson к этому ответу stackoverflow.com/a/25261327/2147244 - person Sergey Markelov; 20.09.2014
comment
вам придется настроить константу, если вы сделаете это, потому что это изменит ваши представления на количество пикселей отступа поля. - person Joris Weimar; 16.10.2014
comment
@GLee, ты спас меня. Я проверил относительную маржу на пару ограничений. Когда я изменил ограничение на 0, оно скорректировало бы вид на 16/-16. Когда я это исправлю, это изменит ограничение. Этот параметр можно установить для первого или второго элемента. Удаление его решило мои давние проблемы с ограничениями. - person Dan Loughney; 08.05.2015

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

введите здесь описание изображения

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

person Tchelow    schedule 14.08.2014
comment
Вы также можете переопределить эту функцию для отдельных ограничений при создании ограничения путем перетаскивания элемента управления в IB. После того, как вы перетащите элемент управления и откроете меню, показывающее ваши возможные ограничения, удерживайте нажатой клавишу Option. Это изменится, например. Ведущее пространство к контейнеру Маржа к простому ведущему пространству к контейнеру. Может быть полезно, если вы просто хотите сделать это для случайного ограничения, а не для изменения значения по умолчанию. - person Matt Gibson; 21.08.2014
comment
Кстати, в Xcode 6 нет такой опции, как предпочитать относительную маржу. Это фантастика, насколько дрянной xcode. Я создал ограничения автоматически, выбрав сброс до предлагаемых ограничений, и ограничения, созданные xcode, имеют эту проблему. Xcode должен быть сожжен на церемонии в полнолуние и предложен богам некомпетентности. Вероятно, они вернут такой замечательный подарок. - person Duck; 11.09.2014
comment
Я бы посоветовал вам добавить эту опцию, а также желательно, чтобы это первое, что кто-то должен попробовать. - person Lucas van Dongen; 11.09.2014
comment
Я обновил информацию и изображение, чтобы показать правильное имя поля, поскольку Apple изменила его в последней версии Xcode (GM ATM). - person Tchelow; 12.09.2014
comment
@Matt Gibson, отличный совет, чувак, я все это время вручную удалял относительные настройки полей / корректировал ограничения. Это будет огромная экономия времени. - person Adam Eisfeld; 27.01.2015

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

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

grep -C 6 -nr Margin .

Число 6 указывает, сколько строк контекста показывать до и после матча.

person Collin    schedule 23.09.2014
comment
Я заменил Margin на trailingMargin, topMargin, LeadMargin и bottomMargin, чтобы получить гораздо лучшие результаты при поиске источника скрытого предупреждения. - person Nur Iman Izam; 30.09.2014
comment
Вы также можете щелкнуть правой кнопкой мыши файл раскадровки в навигаторе проектов Xcode и выбрать «Открыть как» -> «Исходный код». Затем просто найдите файл Margin, как сказал Коллин. - person Gasper; 04.10.2014

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

  1. В исходном коде раскадровки найдите «margin». Вы увидите такую ​​​​строку.

    ограничение firstAttribute="trailingMargin" secondItem="Pgb-8w-IHT" secondAttribute="trailing" Constant="8" id="nKP-uZ-7Xm"/

  2. Найдите идентификатор одного из атрибутов (Pgb-8w-IHT в приведенном выше примере).

  3. Прокрутите вверх, чтобы найти, к какому объекту принадлежит это ограничение. Что-то типа:

    tableViewCell contentMode="scaleToFill" selectionStyle="default"

  4. Вернитесь в режим раскадровки и откройте окно инспектора идентификации.

  5. Выполните поиск в подвидах объекта, который вы нашли выше, чтобы найти идентификатор (Pgb-8w-IHT) в инспекторе идентификации.

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

person Kevin Kaiser    schedule 06.10.2014

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

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

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

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

person user8925456    schedule 23.07.2015