ios autolayout ios8 xcode6

El ancho de diseño máximo preferido automático no está disponible en versiones de iOS anteriores a 8.0



autolayout ios8 (10)

Ahora mi versión de Xcode es 6.1. Pero también recibí esta advertencia. me molesta mucho Después de buscar una y otra vez. Encontré la solución.

Motivo: debe haber configurado su UILabel Lines> 1 en su Guión gráfico.

Solución: configure el atributo Líneas de UILabel en 1 en el Guión gráfico. reinicie su Xcode. Funciona para mí, espero que pueda ayudar a más personas.

Si realmente necesitas mostrar tus palabras más de 1 línea. Deberías hacerlo en el código.

//the words will show in UILabel NSString *testString = @"Today I wanna set the line to multiple lines. bla bla ...... Today I wanna set the line to multiple lines. bla bla ......" [self.UserNameLabel setNumberOfLines:0]; self.UserNameLabel.lineBreakMode = NSLineBreakByWordWrapping; UIFont *font = [UIFont systemFontOfSize:12]; //Here I set the Label max width to 200, height to 60 CGSize size = CGSizeMake(200, 60); CGRect labelRect = [testString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName] context:nil]; self.UserNameLabel.frame = CGRectMake(self.UserNameLabel.frame.origin.x, self.UserNameLabel.frame.origin.y, labelRect.size.width, labelRect.size.height); self.UserNameLabel.text = testString;

Abrí un proyecto iOS existente con Xcode6 beta6, y Xcode muestra la siguiente advertencia para los archivos de Storyboard y Xib:

El ancho de diseño máximo preferido automático no está disponible en versiones de iOS anteriores a 8.0

Intenté abordar la advertencia estableciendo el ancho como explícito como a continuación:

Sin embargo, esto no resolvió las advertencias. ¿Cómo pueden ser removidos?


Como no tengo una reputación de 50, no me deja comentar la segunda mejor respuesta. Encontré otro truco para encontrar la etiqueta del culpable en el Storyboard.

Así que una vez que conozca la identificación de la etiqueta, abra su guión gráfico en una pestaña separada con los controladores de visualización mostrados y simplemente ejecute el comando F y el comando V y lo llevará directamente a esa etiqueta :)


La solución es bastante simple.

Solo habilita Builds para iOS 8 y versiones posteriores


Lo puse funcionando seleccionando el diseño original que tenía en la selección W / H. El guión gráfico funciona como se esperaba y el error desapareció.

Asegúrese también de que está desarrollando para iOS 8.0. Compruébelo desde la configuración general del proyecto.

Aquí es donde debes presionar.


Para encontrar las etiquetas de problemas en un guión gráfico grande, siga mis pasos a continuación.

  1. En el navegador de problemas de xCode, haga clic con el botón derecho en el error y seleccione "Revelar en el registro". (Nota: @Sam sugiere a continuación, busque en el navegador de informes de xCode. También @Rivera señala en los comentarios que "A partir de Xcode 6.1.1, al hacer clic en la advertencia se abrirá automáticamente y se resaltará la etiqueta en conflicto". No he probado esto ).
  1. Esto mostrará el error con un código al final de su archivo de guión gráfico. Copie el valor después de .storyboard
  1. A continuación, revela tu guión gráfico como archivo fuente.

  2. Buscar. Debería poder decir qué etiqueta es de aquí con bastante facilidad mirando el contenido.

Una vez que encuentre la etiqueta, la solución que funcionó para mí fue establecer el "ancho preferido" en 0.

Por cierto, siempre puede obtener rápidamente la identificación de un elemento de la interfaz seleccionando el elemento y buscando en el inspector de identificación. Muy útil.


Para resumir, para mí, siguiendo las dos instrucciones anteriores para cambiar cualquier instancia donde numberOfLines = 0 a 1 o mayor, y agregar manualmente preferredMaxLayoutWidth = "0" a cada instancia de una etiqueta dentro de la fuente del guión gráfico, solucioné todas mis advertencias.


Por alguna razón, incluso si se cambia el Destino de implementación de iOS a 8.0 o superior, los archivos Xib no adoptan ese cambio y permanecen con la configuración anterior en el inspector de archivos

Por lo tanto, debes cambiarlo manualmente para cada Xib.

Una vez hecho esto, la advertencia desaparecerá :-)


Puede solucionar este problema sin abrir el guión gráfico como fuente . Esta advertencia es activada por UILabels si numberOfLines! = 1 y el destino de implementación es <8.0

¿CÓMO ENCONTRARLO?

  1. Vaya a Issue Navigator (CMD + 8) y seleccione el último construido con la advertencia
  2. Localice la (s) advertencia (s) (busque " Diseño Máximo Preferido Automático ") y presione el botón de expansión a la derecha
  3. Encuentra el ID de objeto de la UILabel
  4. Abra el Guión gráfico y BÚSQUEDA (CMD + f) para el objeto. SELECCIONARÁ Y DESTACARÁ la UILabel
  5. Establezca el ancho preferido = 0 "Explicit" como otros sugirieron

Tuve este problema y pude solucionarlo agregando restricciones para determinar el máximo con una etiqueta.

Cuando se suelta una etiqueta multilínea, no hay un conjunto de restricciones para imponer el ancho dentro de la vista principal. Aquí es donde entra en juego el nuevo PreferredMaxWidth. En iOS 7 y versiones anteriores, debe definir el ancho máximo usted mismo. Simplemente agregué una restricción de 10 px en el lado izquierdo y derecho de la etiqueta.

También puede agregar una restricción <= ancho que también corrige el problema.

Así que esto no es realmente un error, simplemente debes definir el ancho máximo tú mismo. La mención explícita de la opción en otra respuesta también funcionará cuando establezca este valor de ancho, sin embargo, tendrá que modificar este valor si desea que el ancho máximo cambie en función del ancho principal (como ha establecido explícitamente el ancho).

Mi solución anterior garantiza que el ancho siempre se mantenga sin importar qué tan grande sea la vista principal.


Actualización 3:
Esta advertencia también puede ser activada por etiquetas que tienen numberOfLines establecido en cualquier cosa menos 1 si su destino de implementación está configurado en 7.1. Esto es completamente reproducible con el nuevo proyecto de vista única.

Pasos para reproducir:

  1. Crear un nuevo proyecto de vista única, objetivo-c
  2. Establezca el destino de implementación en 7.1
  3. Abre el storyboard del proyecto.
  4. Coloque una etiqueta en el controlador de vista proporcionado
  5. Establezca numberOfLines para esa etiqueta en 2.
  6. Compilar

He archivado el siguiente radar:
rdar: // problema / 18700567

Actualización 2:
Desafortunadamente, esto es algo nuevo en la versión de lanzamiento de Xcode 6. Tenga en cuenta que puede, en su mayor parte, editar manualmente su guión gráfico / xib para solucionar el problema. Per Charles A. en los comentarios a continuación:

Vale la pena mencionar que puede introducir esta advertencia con bastante facilidad, y la advertencia en sí misma no ayuda a encontrar la etiqueta que es la culpable. Esto es desafortunado en un storyboard complejo. Puede abrir el guión gráfico como un archivo de origen y buscar con la expresión regular <label(?!.*preferredMaxLayoutWidth) para encontrar etiquetas que omitan un atributo / valor preferido de MaxLayoutWidth. Si agrega preferredMaxLayoutWidth = "0" en tales líneas, es lo mismo que marcar explícitamente y establecer el valor 0.

Actualización 1:
Este error ahora se ha solucionado en Xcode 6 GM.

Respuesta original
Este es un error en Xcode6-Beta6 y XCode6-Beta7 y se puede ignorar de forma segura por ahora.

Un ingeniero de Apple en los foros de desarrolladores de Apple dijo esto sobre el error:

El ancho de diseño máximo preferido es una propiedad de diseño automático en UILabel que le permite crecer automáticamente verticalmente para adaptarse a su contenido. Las versiones de Xcode anteriores a 6.0 establecerían preferredMaxLayoutWidth para etiquetas de varias líneas en el tamaño de los límites actuales en el momento del diseño. Necesitaría actualizar manualmente preferredMaxLayoutWidth en tiempo de ejecución si su diseño horizontal cambia.

iOS 8 agregó soporte para computar automáticamente el valor preferido de MaxLayoutWidth en el tiempo de ejecución, lo que facilita aún más la creación de etiquetas multilínea. Esta configuración no es compatible con versiones anteriores de iOS 7. Para admitir tanto iOS 7 como iOS 8, Xcode 6 le permite seleccionar "Automático" o "Explícito" para preferredMaxLayoutWidth en el inspector de tamaño. Debieras:

Elija "Automático" si se dirige a iOS 8 para la mejor experiencia. Seleccione "Explicit" si la orientación es <iOS 8. Luego puede ingresar el valor de preferredMaxLayoutWidth que desea configurar. Habilitar los valores predeterminados "explícitos" al tamaño de los límites actuales en el momento en que marcó la casilla.

La advertencia aparecerá si (1) está utilizando el diseño automático, (2) "Automático" está configurado para una etiqueta multilínea [puede verificar esto en el inspector de tamaño para la etiqueta], y (3) su destino de implementación <iOS 8.

Parece que el error es que esta advertencia aparece para los documentos que no son de reproducción automática. Si está viendo esta advertencia y no está utilizando el diseño automático, puede ignorar la advertencia.

Alternativamente, puede solucionar el problema usando el inspector de archivos en el guión gráfico o xib en cuestión y cambiar "Construir para" a "Construir para iOS 8.0 y versiones posteriores"