Advertencia de Xcode Storyboard: Restricción de elementos de referencia desactivados en la configuración actual. Desactiva esta restricción en la configuración actual

146

Esta advertencia ocurre en Xcode 6.1. ¿Alguien tiene ideas sobre qué significa esta advertencia y qué sucederá con ella? ¡Muchas gracias!

A continuación se muestra una captura de pantalla con las advertencias abiertas en el código fuente "

ingrese la descripción de la imagen aquí

¿Cómo encontrar qué restricción causa la advertencia? Xcode no le dice qué restricción es el problema.

ingrese la descripción de la imagen aquí

Zhihao Yang
fuente
@wumm sí, la aplicación se puede construir y ejecutar con éxito, solo me preocupa que algún problema potencial pueda suceder de alguna manera, que aún no he conocido.
Zhihao Yang
77
Tenga en cuenta que, en general, este problema está causado por: tiene un elemento que no está instalado, pero tiene restricciones que todavía están instaladas. En general, busque el elemento no instalado y, para todas sus restricciones, márquelo como no instalado.
Fattie
@Fattie Edite la respuesta aceptada con este motivo principal. Gracias
Milan Kamilya

Respuestas:

431

Esta advertencia puede ser molesta y ocurre a partir de Xcode 6.1.1. El problema principal es que no puede encontrar fácilmente la restricción referenciada haciendo clic en la advertencia. Supongo que esto es un error y se solucionará tarde o temprano.

Sin embargo, mientras tanto puedes usar esta pequeña solución:

Paso 1: Detecta advertencias molestas 😱

Advertencia molesta

Paso 2: Haga clic derecho / Ctrl-clic en la advertencia, seleccione Reveal in Log😨

ingrese la descripción de la imagen aquí

Paso 3: admire la belleza del siguiente fragmento de registro:

... snip ...
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Dlb-cb-nWC: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:6Ze-mO-v5N: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:9av-xw-u1o: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:RPt-Uf-vaZ: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Rnc-4M-7jV: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:epJ-D9-KEF: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:4HC-Gu-01w: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
... snip ...

Hmmm ... ¿Qué es esto ...?

interesante

Paso 4: Arrojemos eso a la barra de búsqueda del proyecto ... 😐

buscar

😮 Sí, lo has adivinado bien. Pinchalo.

Paso 5: 😁 ¡Dios mío! Disfruta de unos minutos adicionales de productividad hasta que Apple corrija este molesto error. 😎

wheeee


Para 2016 ...

  • Si no puede obtenerlo con 'Revelar en el registro', muestre el Navegador de informes. (Esa es la pestaña más a la derecha en la columna más a la izquierda.) Profundice en los resultados de construcción allí. Eso mostrará el registro de compilación, incluida la ID de restricción. construcción de cortesía exitosa

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

  • Tenga en cuenta que para Xcode de 5/2016, molestamente, tiene que salir y reiniciar Xcode para borrar esta advertencia en algunos casos.

  • Tenga en cuenta que, de manera confusa, el mismo error puede ser causado por un problema no relacionado (esto parece ser un error de Apple o un mal uso del lenguaje de error): si tiene IBInspectableelementos y los renombra en sus archivos Swift. Xcode no elimina los antiguos UserDefinedRuntimeAttributes por usted. Simplemente haga clic en "Inspector de identidad" (elemento 3 en el panel derecho) y elimine los elementos defectuosos.

Para 2017 ...

  • Otra causa común, y de hecho más simple, del problema. Si accidentalmente desinstaló un elemento: al momento de escribir, Xcode simplemente no sabe desinstalar automáticamente las restricciones que conducen a ese elemento . En pocas palabras, observe los elementos no instalados y, para todas sus limitaciones, márquelos como no instalados. (O simplemente, tal vez solo elimine temporalmente el elemento no instalado por completo, para ver si ese es el problema).
BastiBen
fuente
28
Esa explicación fue asombrosa. ¡Gracias!
thomasmalt
77
Mi respuesta favorita de la semana :) Y muy útil. ¡Gracias!
5hrp
55
Creo que los emojis deberían ser necesarios en las respuestas a partir de ahora.
James Webster
3
¿Qué sucede si Reveal in Log está atenuado como en mi caso?
bakalolo
66
Mi clic derecho -> Revelar registro no estaba haciendo nada, así que abrí registros usando esto como referencia: stackoverflow.com/questions/19014359/…
terrigenus
39

Este mensaje se activa cuando ha desactivado una vista en su guión gráfico, pero no desactiva las restricciones basadas en esa vista.

Por ejemplo, desactivó un botón, pero aún tiene algunas restricciones vinculadas a ese botón. Puede ser una restricción intrínseca como la altura o el ancho, o una restricción relativa como la distancia desde otra vista.

Debe desactivar cada una de las restricciones que hacen referencia a la vista, y debe hacerlo manualmente. Xcode está siendo demasiado conservador aquí y no lo hará por usted.

KPM
fuente
44
¡Gracias por su respuesta! ¿Podría hacer más específico lo que es "una vista desactivada"? ¿Es para borrar una vista (como un botón)? pero como ya lo eliminé, ¿la restricción también podría eliminarse y no se pudo encontrar? ¿Y cómo "desactivar la restricción" con más detalle, solo selecciónelo y elimínelo? ¡Muchas gracias!
Zhihao Yang
2
Si una vista no está marcada como "Instalada" en Interface Builder para su clase de tamaño actual, entonces se desactiva.
DivideByZer0
Tengo muchos ViewControllers en mi guión gráfico. ¿Cómo sé cuál tiene una subvista no instalada?
jobima
puede hacer clic derecho en la advertencia y seleccionar la opción "Código fuente". Allí debería ver claramente la jerarquía de la vista correspondiente en el controlador de vista respetado.
ZaEeM ZaFaR
15

Esta solución me funciona.

Debido a que copié varios elementos del proyecto que desarrollé en Xcode 5 en Xcode 6, y el guión gráfico en Xcode 6 admite múltiples diseños, para cada restricción, necesito instalarlo en la configuración actual.

Por ejemplo, estoy usando "Ancho compacto | Altura normal", para la restricción que necesito establecer como a continuación:

ingrese la descripción de la imagen aquí

Después de verificar y establecer todos los cientos de restricciones en mis proyectos, limpiar y construir, las advertencias finalmente desaparecen.

Zhihao Yang
fuente
1
Tenga en cuenta que también hay esas Installedcasillas molestas en los atributos de su objeto de vista. Por lo tanto, asegúrese de que los objetos de vista que cree que se muestran tengan marcada la casilla correcta. La advertencia le indica que algunos objetos no se muestran en el current configuration.
Matt
Esto funcionó para mí también. XCode dijo que tenía 12 o 13 advertencias, pero al buscar en el registro una de ellas, se demostró que había al menos 100. Así que revisé cada una de ellas, agregué un wChR para cada restricción y luego desmarqué el genérico 'Instalado'. Advertencias desaparecieron!
Andreas
Oh, olvidé mencionarlo. Me di cuenta a mitad de camino que en realidad puedes hacer este proceso para varias restricciones a la vez seleccionándolas al mismo tiempo.
Andreas
8

Solo quería agregar mi caso sobre cómo me ocurrió este error: en mi caso, quería eliminar un campo de texto con "Cmd + Retroceso". Hice esto directamente en la vista de árbol de Scene-Builder:

ingrese la descripción de la imagen aquí

Puedes ver que el campo de repetición está atenuado.

Entonces eso fue fácil de descubrir para mí. Puede simplemente eliminar realmente el campo seleccionando:

Editar-Eliminar desde el menú

Sorprendentemente, esto realmente elimina el campo (incluidas las restricciones). Tal vez esto ayude a alguien a encontrar fácilmente la causa de esta molesta advertencia ...

Puñal
fuente
Esto realmente no responde la pregunta. Si tiene una pregunta diferente, puede hacerla haciendo clic en Hacer pregunta . También puede agregar una recompensa para llamar más la atención sobre esta pregunta una vez que tenga suficiente reputación . - De la opinión
Martin Evans
3
Esta es otra forma en que se puede solucionar la pregunta. Así que solo quería agregar esto para ayudar a otros ...
Dirk
Gracias, muy útil
Ahmed Elashker
Esta respuesta restringió cómo encontrar y solucionar el problema. ¡Funcionó para mí!
Lance Samaria el
6

Explicación ampliada

No hay nada malo con las otras respuestas. Solo quería llamar la atención sobre la redacción de la advertencia original e identificar un par de casos de uso en los que esto puede aparecer en el flujo de trabajo.

advertencia de restricción

Elementos de referencia de restricción desactivados en la configuración actual.

Esto significa que algún elemento (generalmente un control o vista personalizada que normalmente es visible) al que se hace referencia en una o más restricciones está desactivado (desactivado o la casilla de verificación "instalada" está desactivada). Si, por ejemplo, decide que desea mover un control o vista en su guión gráfico fuera de la vista principal (o puede ver a veces al hacer algo interesante en las clases de tamaño), puede ver esta advertencia si el control tiene restricciones asociadas. .

control desinstalado

Junto con la solución recomendada:

Desactive esta restricción en la configuración actual.

Dos enfoques para arreglar

Esquema del documento

Visualmente puede abrir el Esquema del documento en su guión gráfico y buscar las Restricciones en gris que hacen referencia a su control / vista sentado fuera de la vista principal (amplíe el contorno, haga clic en la restricción y vea el inspector de atributos, con el mouse hacia abajo para revisar rápidamente) . Luego, elimine la restricción de este contexto (clase de tamaño). Por ejemplo, en mi caso, solo mantengo el control hasta que decida más adelante dónde presentarlo, así que decidí eliminar por completo la restricción ofensiva hasta más tarde. Pero en una clase de tamaño simplemente desinstalaría la restricción del contexto actual utilizando la casilla de verificación instalada en el inspector de atributos.

Navegador de registros / herramienta de búsqueda

También se puede seguir usando el Navegador de registros para encontrar el control del problema a través del identificador único dado a cada objeto en el guión gráfico. En el registro, sería justo antes del texto resaltado en amarillo y normalmente toma la forma que se ve en mi ejemplo anterior: jvj-mY-DHf

Al usar el identificador, se puede usar la herramienta de búsqueda en Xcode para localizar y eliminar (completamente) o desinstalar (para el contexto actual) la restricción ofensiva.

navegador de registro

Si eres aficionado a Xml y su simplicidad, también puedes abrir Storyboard como código fuente y encontrar el identificador único ofensivo y eliminar el bloque apropiado de xml.

Tommie C.
fuente
1

Una de las razones por las que esto podría suceder es porque seleccionó una clase de tamaño que no es compatible con sus restricciones ( wAny hAnyes un caso común). En tal caso, simplemente seleccione una clase de tamaño diferente en Interface Builder y ya está.

Jano
fuente
1

Para mí, sucede si configuro un objeto una nueva restricción a objeto (no ver) con la opción "Restricción a márgenes" sin marcar. Problema resuelto marcando la opción (que es la predeterminada).

Ryde
fuente
1

Lo que funcionó para mí (y no tengo idea de por qué) es desactivar "Usar variaciones de rasgos", luego realizar una limpieza y luego volver a activarlas. La siguiente versión no tenía advertencias.

Para desactivar "Usar variaciones de rasgos", simplemente seleccione su guión gráfico en el Navegador de proyectos y luego seleccione Inspector de archivos.

ingrese la descripción de la imagen aquí

Luego, simplemente anule la selección de "Usar variaciones de rasgos", realice la limpieza presionando Shift-CMD K, y luego vuelva a activar las variaciones de rasgos si desea usarlas.

ingrese la descripción de la imagen aquí

Scooter
fuente
No creo que esto sea "correcto" per se (las restricciones desaparecen), sin embargo, esta respuesta fue útil para mí porque tan pronto como manipulé este interruptor y luego revertí los cambios a la última confirmación, Xcode actualizaría muy bien cualquier viejo / incorrecto / Ya solucioné advertencias de este tipo. Parece que Xcode mostraría advertencias antiguas y ya solucionadas en la mayoría de los casos; reiniciar Xcode normalmente no me ayudaría. Activar ese interruptor + restaurar a la última confirmación parece mostrar la siguiente advertencia "real" de este tipo; al hacer clic en él, se seleccionará automáticamente la restricción problemática en IB.
Jonny
0

Pensé que era una restricción persistente debido a la otra respuesta, sin embargo, se debió a una "salida" que todavía tenía para un elemento que eliminé antes. Que hacer es:

  1. Seleccione su ViewController
  2. Haga clic en el ícono 'outlet' en la esquina superior derecha
  3. Mire a través de sus puntos de venta y elimine cuidadosamente los que no necesita

En el peor de los casos, elimina todos los puntos de venta y simplemente vuelve a conectarlos. ¡Caso resuelto!

Risas
fuente
0

Como se mencionó y bien guiado en la respuesta de @ BadCat , seguí los pasos y ¡solo un paso más me atreví a dar!

Pasos a seguir después del último paso de la respuesta de BadCats:

Paso 1:

Seleccioné la restricción en el Creador de interfaces y luego tuve en cuenta para qué sirve y luego la eliminé.

Paso 2

Cree el Proyecto XCode y le mostrará que puede aumentar el número de Advertencias. Esto se debe a que ha eliminado una restricción que necesita compilar bien. ¡Entonces, vaya al 3er paso!

Paso 3

Vuelva a agregar la restricción que tenía en mente (la que eliminó). ¡Y luego reconstruirlo de nuevo!

¡Para mí las advertencias desaparecieron simplemente haciendo esto! ¡Supongo que esto funcionará para algunas personas!

Porque:

Como pude entender el problema que causó esta advertencia fue que tenía una etiqueta conectada a un IBOutlet, pero su nombre comenzaba con una letra mayúscula. Así que le cambié el nombre con una simple letra en el ViewController y vine a cambiarlo en el IB. Eliminé IBOutlet pasado y fui a conectarlo al nombre de propiedad recién renombrado y me conecté. Entonces noté que aparece una nueva advertencia.

Primero probé la siguiente respuesta también en este hilo, ¡pero no me ayudó!

¡Salud!

Randika Vishman
fuente
0

Mi caso es elegir etiqueta, luego hacer clic en control + X, se desactivará, pero no hago nada al respecto. Cuando construya, mostrará una advertencia. Solución: elimine la etiqueta o elimine el control elegido + X para la etiqueta.

Duyen Hang Kim
fuente
0

Elimino todos esos elementos de la interfaz de usuario, incluidas sus restricciones, y los agrego de nuevo, esas advertencias simplemente desaparecen. De todos modos, esta es una forma peor pero útil de resolver esto.

El viejo
fuente
0

Tuve el problema en una vista de pila. Eliminar las restricciones y volver a agregarlas no ayudó. La limpieza y la reconstrucción no ayudaron.

Para mí, la solución fue crear un objeto de vista de pila completamente nuevo.

Luego mueva todos los elementos de la vista de pila anterior a la nueva vista de pila.

Eliminar la vista de pila anterior solucionó el problema.

George Filippakos
fuente