ios - safearea - swift remove safe area
Xcode 8. Restricción de elementos de referencia desactivados en la configuración actual (8)
Me enfrenté con el problema después de actualizar a Xcode 8. Cada vez que se eliminan los objetos de la interfaz de usuario del guión gráfico principal, aparece la siguiente advertencia:
Restricción de elementos de referencia desactivados en la configuración actual. Desactive esta restricción en la configuración actual.
Parece que este es un error de Xcode, pero de todos modos quiero eliminar estas advertencias del proyecto. Encontré que hubo el mismo problema con Xcode 6 here pero ninguna respuesta de esa pregunta solucionó el problema, no. Entonces, cuando encuentro la restricción incorrecta en el guión gráfico y la elimino, la cantidad de restricciones incorrectas aumenta en lugar de disminuir. Cosas que también he probado:
- limpiado el proyecto
- limpiado los datos derivados
- Se eliminaron todas las restricciones y se agregaron nuevas desde cero.
¿Algunas ideas?
La respuesta corta: inspeccione el código fuente de su guión gráfico para cada uno de los identificadores en sus advertencias buscando ''id = " theIdFromWarning" . Los identificadores son para las restricciones . Cuando encuentre el ID de restricción, hará referencia a los dos ID de elemento. Busque los elementos buscando ''id = " theIdForElement "'' Luego encontrará el nombre o alguna información en el código fuente de ese elemento para averiguar qué elemento está viendo. Luego, cambie el guión gráfico del código fuente al generador de interfaces, busque los dos elementos y vea en qué clase de tamaño está instalada la restricción relacionada pero el elemento no. Ejemplo: ViewA.right podría estar restringido horizontalmente a ViewB.left, instalado en todas las clases de tamaño, pero ViewA podría estar instalado solo en height = Regular size class. Solución: instale ViewA en todas las clases de tamaño, o desinstale la restricción en todas las clases de tamaño y agregue la restricción solo a la clase de tamaño alto = Regular.
Respuesta más larga, paso a paso:
No pude ver fácilmente a qué restricciones / elementos se referían estas advertencias. Para mí, pude hacer clic derecho en la advertencia y seleccionar "Revelar en el registro". Esto reveló 10 advertencias en este formato de estilo:
/my/filepath/to/storyboard:1xe-xx-Bx5: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
Si su registro no muestra una descripción detallada como esta, haga clic con el botón derecho en cualquier referencia de registro a los 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.
advertencia y seleccione Expand all transcripts
, luego busque en el archivo de registro las descripciones de restricciones.
Entonces, abrí mi guión gráfico, hice clic con el botón derecho en el archivo del guión gráfico en el navegador del proyecto y seleccioné ''ver como código fuente'' buscando todas las restricciones por el id indicado (en el ejemplo anterior, busqué el id: 1xe-xx-Bx5 ) , y encontré una referencia a ella:
<constraint firstItem="Mwb-6O-DKs" firstAttribute="top" secondItem="y2M-Sk-Ygh" secondAttribute="bottom" constant="19" id="1ce-xx-Bx5"/>
Lo que esto me dice es:
- Que la restricción tiene un id de 1ce-xx-Bx5
- La restricción está asociada a dos elementos:
- Uno tiene el id de Mwb-6O-DKs
- El otro tiene el id de y2M-Sk-Ygh
Así que busqué en el código fuente el primer elemento por id, buscando id="Mwb-6O-DKs"
y encontré esto:
<label ...(truncating for readability sake)...text="Build Label"...(truncating for readability sake)...id="Mwb-6O-DKs">
Esto me dice que el primer elemento es un UILabel
con el título ''Crear etiqueta''.
Buscando el segundo elemento por id, id="y2M-Sk-Ygh"
, reveló:
<viewController storyboardIdentifier="login"...(truncating for readability sake)...<layoutGuides><viewControllerLayoutGuide type="top" id="y2M-Sk-Ygh"/>
Por lo tanto, entiendo que la UILabel
con el texto "Crear etiqueta" tiene una restricción superior que está desactivada. (ya que la restricción viewControllerLayoutGuide
nunca debe desactivarse, debe ser la UILabel
.
He aquí que no fue instalado. Seleccioné la casilla de verificación Installed
para UILabel, y el error desapareció.
1 abajo, 9 más para ir! (F * ing Xcode ...)
La solución fue simplemente eliminar las vistas desinstaladas. Simple como eso.
Mostrar el Report Navigator
[Esa es la pestaña de la derecha en la columna de la izquierda]. Esto mostrará el registro de compilación con identificadores de restricción. Para más detalles, mira en la publicación de este .
Para resolver este problema hay algunas opciones:
Primero que causa el problema? Desinstalar una vista sin desinstalar sus restricciones.
Segundo, ¿por qué lo harías? Es posible que desee que una vista permanezca en su controlador de vista porque lo construyó y luego las especificaciones cambiaron, por lo que quiso eliminarlo temporalmente porque tal vez esa parte no se incluyó en su sprint actual o no.
Por último, ¿cómo se resuelve?
Hay tres opciones:
Si puede simplemente reinstalar la vista
Si quieres mantener la vista.
Si solo puede eliminar la vista desinstalada todos juntos
Opción 1
Si puede simplemente reinstalar la vista:
Reinstale la vista alternando la opción instalada como se ve en la imagen 2 en cualquier vista que se desvanece como se ve en la imagen 1
Intente limpiar el proyecto (Comando + Shift + K) - si eso no funciona, intente reiniciar xCode. Si eso no funciona, es posible que haya perdido una vista desinstalada en algún lugar.
opcion 2
Si quieres mantener la vista:
- Encuentre todas las vistas en su sistema de controlador de vista que se desvanecen (esto significa que se ha desinstalado)
- Observa las restricciones asociadas a la vista.
- Desmarque "instalado"
La restricción ahora también se desvanecerá (no el grupo de restricciones) como se ve en la primera imagen.
- Intente limpiar el proyecto (Comando + Shift + K) - si eso no funciona, intente reiniciar xCode. Si eso no funciona, es posible que hayas perdido una restricción en algún lugar.
Opcion 3
Si solo puede eliminar la vista desinstalada todos juntos
Elimine las vistas que se hayan desinstalado, lo que eliminará automáticamente sus restricciones
Limpie el proyecto (Comando + Shift + K), si eso no funciona, intente reiniciar xCode.
También puede encontrar la vista o la restricción mirando la etiqueta en la fuente del guión gráfico.
- Abre el guión gráfico como fuente
- Busque la siguiente etiqueta para obtener el ID
- Busque la identificación en el guión gráfico para encontrar qué elemento es.
Tenía varias vistas que no estaban Installed
, después de actualizar a xcode 8.1, tenía 2 advertencias.
Los siguientes pasos funcionaron para mí:
1) Limpie el proyecto y reinicie Xcode, las advertencias disminuyeron a 1.
2) La selección de la advertencia mostrará exactamente qué restricción tiene un problema. Abra el Attributes Inspector
y seleccione las vistas donde se aplica la restricción, busque Installed
si no está marcada en la vista (no en la restricción). Puede seleccionar Instalado en la vista o Deseleccionar Instalado en la restricción .
Ver captura de pantalla a continuación. Installed
no estaba marcado en la vista, no en la restricción a la que apuntaba la advertencia :)
Actualización: el mismo problema de nuevo con otro ViewController, una UIView no se instaló para una clase de tamaño, deselecciono Instalado en la restricción en sí misma y la advertencia desaparece también, supongo que no es un error de Xcode, su reclamo de activar o desactivar la instalación en ambas UIView y Constrarint
Tuve una vista que había desinstalado por lo que apareció la advertencia. Después de reinstalar la vista, la advertencia no desapareció, incluso después de una limpieza. Pero después de reiniciar Xcode la advertencia desapareció.
Razón
Tiene un elemento (es decir, una vista) que no está instalado, pero tiene restricciones que aún están instaladas. (comentado por Fattie )
Cómo averiguar la restricción específica
Es difícil encontrar una restricción exacta que cause esta advertencia. Mencionó paso a paso en la respuesta de BastiBen cómo averiguar la restricción específica.
Solución
- Verifique los elementos / vistas (primero y segundo) de la restricción específica si algún elemento está desinstalado para una clase de tamaño específica. En mi caso, la restricción se instaló para todas las clases de tamaño, pero uno de los elementos se instaló para "wC hR" (Ref. Imagen siguiente).
- Instale el artículo para resolver la advertencia.
- Ahora, cree la aplicación, si aún encuentra la misma advertencia para esa interfaz específica / archivo XIB, no se preocupe, esta vez, otras restricciones tienen el mismo problema.
Consejos para el futuro
- Compruebe si las vistas están correctamente instaladas mientras las copia / pega desde otras interfaces.