ios - framework - xcode documentation
Atributos de diseño relativos al margen de diseño en las versiones de iOS anteriores a 8.0 (7)
¿Qué estaría causando la siguiente advertencia (y los siguientes problemas de alineación en iOS 7)?
Atributo no disponible: atributos de diseño relativos al margen de diseño en las versiones de iOS anteriores a 8.0
Xcode 6 crea restricciones basadas en márgenes relativos por defecto.
Por lo tanto, si desea forzar la eliminación de todos los atributos de línea de base y no desea buscar todas las restricciones negativas en Interface Buidler, para admitir iOS 7 , puedo recomendarlo de esta manera
Para encontrar y eliminar todas las cadenas ficticias con "Línea base" en las restricciones, puede hacer esto:
- Cerrar Xcode
- Abra su archivo stroyboard en su editor de texto favorito, que admite expresiones regulares.
- Busque y elimine del archivo del guión gráfico todas las cadenas por patrón:.
.*"baseline".*/n
- Ahora guarde el archivo y ábralo en Xcode
- Reparar todos los errores aparecidos: encuentre todas las advertencias y presione "Actualizar restricciones para todas las vistas" para guardar la posición original de todas las vistas.
- ¡Lucro!
UPD: encontré que las restricciones de "línea de base" también causan bloqueos, ¡pero Xcode no muestra ninguna advertencia sobre estas restricciones!
Para solucionarlo: elimine del archivo del guión gráfico todas las cadenas por patrón:. .*"baseline".*/n
Actualmente estoy en la misma situación que estoy creando una aplicación en Xcode 6 que apunta a iOS7 y 8. Esa advertencia aparece porque las restricciones relativas al margen no están disponibles en iOS7, pero se crean de manera predeterminada en Xcode 6 .
Puede volver atrás y editar la restricción para no usar esa función ''Relativo al margen'' como lo sugieren las otras respuestas a esta pregunta.
Al crear nuevas restricciones, mantengo presionada la tecla Opción al elegir qué tipo de restricción crear. Esto me da la capacidad de crear una restricción que no se basa en el margen de inmediato, así que no tengo que volver atrás y arreglarlo después.
Al desmarcar la casilla de verificación "Preferencia de Margen Preferida", no podrá entrar en la situación en la que recibe esta advertencia.
Si eres como yo y construiste una aplicación completa con restricciones antes de darte cuenta del problema, entonces las cosas son un poco más difíciles porque Xcode no te dirá fácilmente qué restricciones son un problema.
Con el fin de evitar la reconstrucción de todas mis restricciones, recurrí a mirar el archivo .storyboard real y busqué restricciones como esta:
<constraint firstItem="vId-..." firstAttribute="top" secondItem="In7-..." secondAttribute="topMargin" id="C0H-..."/>
Observe "topMargin". Los atributos que terminan en "Margen" causan la advertencia. Revisé e identifiqué las restricciones en el archivo de esta manera, luego las eliminé y las recreé en IB. Después de eso, esta advertencia desapareció.
Sospecho que esto también debería resolver algunas inconsistencias entre el manejo de restricciones de iOS 7 y iOS 8, aunque todavía encuentro algunas diferencias en el comportamiento, incluso después de abordar todas las advertencias de Xcode.
Desactivar "Prefiere el margen relativo"
Ninguna de las respuestas publicadas resolvió el problema para mí. Pero la razón de esto es la siguiente: Xcode 6 crea restricciones basadas en márgenes relativos por defecto. Esos solo están disponibles en iOS 8.0 y versiones posteriores. Obtiene estas advertencias cuando su destino de despliegue está configurado en iOS 7.0 o inferior.
La forma en que arreglé la advertencia:
- Haga clic en la advertencia en Xcode
- El inspector de atributos abrirá la restricción
- Buscar el artículo que tiene margen (ver captura de pantalla)
- Desactivar la opción relativo a margen
Suprimir las advertencias: revisé todas las restricciones de IB y borré todo lo que decía "Primera línea de base ...". Esto hizo que todas estas advertencias desaparecieran. Sin embargo, IB reintroducirá las advertencias si "Agrega las restricciones faltantes" o "restablece a las restricciones sugeridas".
Causa posible: a partir de un proyecto nuevo de Xcode 6.1, copié / pegué ViewControllers en Storyboard (de forma perezosa), usando "restablecer a las restricciones sugeridas". Luego cambió el objetivo del proyecto de 8.0 a 7.1. Esto causó que las advertencias aparecieran. Noté que las advertencias solo ocurrieron en algunos de mis ViewControllers, que creo que fueron los que copié / pegué en Storyboard.
Sugerencia: si la orientación es 7.1, configúrela antes de usar IB. No copie / pegue los controladores de visualización en Storyboard. Y tenga cuidado con las "nuevas advertencias" cuando trabaje en IB, por lo que esperamos poder confirmar la causa de esta molestia.
Tomé un enfoque no programador.
Sabía qué controlador de vista causaba el mensaje de margen 8.0. Entonces, fui a mi lista de restricciones. Tenía 33. Eliminé todos los que causaban el mensaje de margen 8.0. Bajé a 20 (entonces 11 era un problema).
Seleccione 32 sobre 33 eliminar y vea el resultado. Seleccione 31 sobre 33 eliminar y así sucesivamente ... Naturalmente, cuando el mensaje sigue allí ... elimine el problemático.
Entonces me llevó 5 minutos resolver el mensaje de error.
Aparecieron otros mensajes de restricción, pero eso no es gran cosa.
De acuerdo, vuelva a realizar y resuelva paso a paso los mensajes de restricción, pero esta vez compruebe que todas las restricciones que agrega no provocan la reaparición del mensaje de margen 8.0. Si es así, deshazte y toma otra estrategia al agregar restricciones. Siempre hay otra manera de agregar una restricción que funcione.
Eso no es lo que propone Xcode, pero hará el trabajo.
Al final, tu hecho .
Si tiene más de un controlador de vista y no sabe si uno está causando el mensaje de margen 8.0, trate de aislar cada controlador de vista. Puede estar en un proyecto de prueba separado con una copia y pegar o eliminar todas las otras vistas excepto una y se el resultado.
Usar "Crear instantánea" en el menú de archivos puede ayudarte si algo sale mal.