2016-10-15 2 views
12

я столкнулся с проблемой после обновления до Xcode 8. Каждый раза после того, как объекты пользовательского интерфейса удаляется из главного раскадровки я получаю следующее предупреждение:Xcode 8. Constraint ссылающихся элементы сворачиваются в текущей конфигурации

Ограничение ссылок на объекты, отключенные в текущей конфигурации. Выключите это ограничение в текущей конфигурации.

enter image description here

Похоже, это Xcode ошибка, но в любом случае я хочу, чтобы удалить эти предупреждения от проекта. Я обнаружил, что была такая же проблема с Xcode 6 here, но ответа на этот вопрос не было исправлено. Поэтому, когда я нахожу неправильное ограничение в раскадровке и удаляю его, количество неправильных ограничений увеличивается, а не уменьшается. I вещи, которые я также пытался:

  • очистить проект
  • очищено выведенные данные
  • удалены все ограничения и добавлены новые с нуля

Есть идеи?

+0

любые обновления по этому вопросу? –

+0

@MuruganandhamK к сожалению нет – Danny

+0

@MuruganandhamK проверить, нет ли у вас каких-либо просмотров 'Installed' – AamirR

ответ

8

У меня было несколько просмотров, которые не были Installed, после обновления до xcode 8.1 у меня было 2 предупреждения.

Следующие шаги работал для меня:

1) Очистите проект и перезапустить Xcode, предупреждения уменьшилось до 1.

2) Выбор предупреждения покажет, какие именно ограничения возникли проблемы. Откройте Attributes Inspector и выберите те виды, в которых применяется ограничение, найдите Installed, если он не установлен на вид (а не на ограничение). Вы можете либо выбрать Установлено на вид, или unselect Устанавливается на самом ограничении.

См. Снимок экрана ниже. Installed был снят на виду, а не на ограничение, что предупреждение указывая на :)

Installed is unchecked on a view, not on constraint itself

Update: Та же проблема снова с другим ViewController, UIView не был установлен для размерного класса, я UNSELECT установлен на ограничение и предупреждение тоже исчезло, я думаю, что это не ошибка Xcode, его требование включить/выключить на UIView и Constrarint

+0

Все мои ограничения, которые уже установлены. Так что это не помогло. О чистке проекта и перезапуске, как я писал в моем вопросе, я уже пробовал, и это не помогло. – Danny

+0

@ Danny, пожалуйста, проверьте вид, в котором привязан ограничение, а не ограничение, в вашем случае может даже быть установлено представление, просто проверьте в случае :) – AamirR

+0

Спасибо, это помогло. Но что установить флажок с элементами пользовательского интерфейса? – Danny

3

Показать Report Navigator [Это самая правая вкладка в крайнем левом столбце]. Это покажет журнал построения с идентификаторами ограничений. Для получения дополнительной информации, посмотрите на это stackoverflow's post.

+1

Если вы внимательно прочитали мой вопрос, вы увидите, что у меня есть ссылка на него, вопрос, который вы указали, и я написал, что ни один из способов решения проблемы не помог мне решить проблему. – Danny

+0

: o право. Я буду следить за вашим вопросом для получения обновлений. – Munahil

+0

@Munahil верен: это идентичная проблема. Вы должны (1) полностью удалить данный предмет, (2) просто убедитесь, что все ограничения «не установлены», если элемент «не установлен». Обратите внимание, что, конечно, вы не можете просто «удалить ограничение», поскольку это (очевидно) приведет к другим ошибкам макета. – Fattie

6

Короткий ответ: Проверьте исходный код вашей раскадровки для каждого из идентификаторов в ваших предупреждениях, выполнив поиск «id =» theIdFromWarning «. Идентификаторы указаны для ограничений . Когда вы найдете идентификатор ограничения, он будет ссылаться на идентификаторы двух элементов.Найдите элементы, выполнив поиск «id =» theIdForElement «Тогда вы найдете имя или часть информации в этом исходном коде элемента, чтобы узнать, на какой элемент вы смотрите. Затем переключите раскадровку обратно из исходного кода в конструктор интерфейса, найдите два элемента и посмотрите, какой размерный класс связан с соответствующим ограничением, но элемент отсутствует. Пример: ViewA.right может быть ограничен горизонтально ViewB.left, установленным во всех классах размеров, но ViewA может быть установлен только в height = Regular size class. Решение: установите ViewA на все классы размеров или удалите ограничение для всех классов размеров и добавьте ограничение только к классу height = Regular size.

Более длинный ответ, шаг за шагом:

Я не был в состоянии легко увидеть, какие ограничения/элементы эти предупреждения имели в виду. Для меня я смог щелкнуть правой кнопкой мыши предупреждение и выбрать «Показать в журнале». Это показало 10 предупреждений в этом формате стиля:

/my/filepath/to/storyboard:1xe-xx-Bx5: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.

Если журнал не отображается подробное описание, как это, затем щелкните правой кнопкой мыши на какой-либо ссылки на журнал Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration. предупреждения и выберите Expand all transcripts, а затем искать Ваш журнал файл для описания ограничений.

Итак, я открыл раскадровку, щелкнул правой кнопкой мыши файл раскадровки в навигаторе проекта и выбрал «просмотр как исходный код» для поиска каждого ограничения указанным идентификатором (в приведенном выше примере я искал идентификатор: 1xe -xx-BX5), и нашел одну ссылку на него:

<constraint firstItem="Mwb-6O-DKs" firstAttribute="top" secondItem="y2M-Sk-Ygh" secondAttribute="bottom" constant="19" id="1ce-xx-Bx5"/>

Что это говорит мне:

  • это ограничение имеет идентификатор 1ce-х х-BX5
  • Ограничение связано с двумя элементами:
  • Один имеет идентификатор MWB-6-O-ДК
  • Другой имеет идентификатор y2M-Sk-Ygh

Так что я искал исходный код для первого элемента по идентификатору, путем поиска id="Mwb-6O-DKs" и нашел это:

<label ...(truncating for readability sake)...text="Build Label"...(truncating for readability sake)...id="Mwb-6O-DKs">

Это говорит мне, что первым элементом является UILabel с заголовком «Построить ярлык».

Поиск второго элемента по идентификатору, id="y2M-Sk-Ygh", показал:

<viewController storyboardIdentifier="login"...(truncating for readability sake)...<layoutGuides><viewControllerLayoutGuide type="top" id="y2M-Sk-Ygh"/>

Итак, я беру это означает, что UILabel с текстом «Build Ярлыка» имеет верхнее ограничение, выключен. (Так как viewControllerLayoutGuide ограничение никогда не должен быть выключен, он должен быть UILabel.

И вот, она не была установлена. Я выбрал Installed флажок для UILabel и исчезла ошибка.

1 down, 9 больше to go! (F * ing Xcode ...)

+1

спасибо, что нашли время, чтобы напечатать это !!! – Fattie

0

У меня было представление, что я удалил, чтобы появилось предупреждение. После переустановки просмотра предупреждение не исчезло даже после чистки. Но после перезапуска Xcode предупреждение исчезло.

0

Причина

У Вас есть элемент (т.е. вид), который является не-Installed, но он имеет ограничения, которые до сих пор установлены. (прокомментированы fattie)

Как узнать конкретное ограничение

трудно найти точное ограничение, который вызывает это предупреждение. Он упомянул шаг за шагом в BastiBen's answer, как узнать конкретное ограничение.

Решение

  • Проверить оба изделия/виды (первый & второй) конкретного ограничения, является ли какой-либо элемент деинсталлировать для любого конкретного размера класса. В моем случае ограничение было установлено для всех размерных классов, но один из элементов был установлен для «wC hR» (см. Следующее изображение). enter image description here
  • Установите элемент, чтобы устранить предупреждение.
  • Теперь, создайте приложение, если вы все еще найдете одно и то же предупреждение для этого конкретного интерфейса/файла XIB, не волнуйтесь, на этот раз некоторые другие ограничения имеют одинаковую проблему.

Рекомендации для будущего

  • Пожалуйста, проверьте, правильно ли установлен вид в то время как копировать/вставить их от других интерфейсов.
0

Решение было просто удалить удаленные виды. Просто как тот.

Смежные вопросы