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

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

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

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

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

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

Pasos para reproducir:

  1. Crear un nuevo proyecto single-view, object-c
  2. Establezca el destino de despliegue en 7.1
  3. Abra el guión gráfico del proyecto
  4. Coloque una etiqueta en el controlador de vista proporcionado
  5. Establezca numberOfLines para esa etiqueta en 2.
  6. Comstackr

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, en su mayor parte, puede 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 accidentalmente, y la advertencia en sí no ayuda a encontrar la etiqueta que es la culpable. Esto es desafortunado en un guión gráfico complejo. Puede abrir el guión gráfico como un archivo de origen y buscar con la regex para buscar tags que omitan un atributo / valor preferredMaxLayoutWidth. 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 ya se ha corregido en Xcode 6 GM.

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

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

El ancho máximo de diseño preferido es una propiedad de diseño automático en UILabel que le permite crecer automáticamente de forma vertical para adaptarse a su contenido. Las versiones de Xcode anteriores a 6.0 establecerían preferredMaxLayoutWidth para las tags de líneas múltiples con el tamaño actual de los límites en tiempo de diseño. Debería actualizar manualmente preferredMaxLayoutWidth en tiempo de ejecución si su diseño horizontal cambia.

iOS 8 agregó soporte para computar automáticamente preferredMaxLayoutWidth en tiempo de ejecución, lo que hace que la creación de tags multilíneas sea aún más fácil. Esta configuración no es retrocompatible con iOS 7. Para admitir iOS 7 e 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 obtener la mejor experiencia. Seleccione "Explícito" si está dirigido a

La advertencia aparecerá si (1) está usando el diseño automático, (2) "Automático" está configurado para una etiqueta de línea múltiple [puede verificar esto en el inspector de tamaño para la etiqueta], y (3) su destino de despliegue

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

Alternativamente, puede solucionar el problema mediante el uso del inspector de archivos en el guión gráfico o xib en cuestión y cambiar "comstackciones para" a "comstackciones para iOS 8.0 y posterior". Inspector de archivos Xcode

Para encontrar la (s) etiqueta (s) del problema en un guión gráfico grande, siga mis pasos a continuación.

  1. En el navegador de problemas de xCode, haga clic derecho sobre 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 resaltará la etiqueta en conflicto”. No he probado esto )

enter image description here

  1. Esto mostrará el error con un código al final de su archivo del guión gráfico. Copie el valor después de .storyboard

enter image description here

  1. A continuación, revele su guión gráfico como archivo fuente. enter image description here

  2. Buscar. Debería poder ver qué etiqueta es desde aquí con bastante facilidad mirando el contenido. enter image description here

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

enter image description here

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

enter image description here

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 despliegue es <8.0

¿CÓMO ENCONTRARLO?

  1. Vaya a Issue Navigator (CMD + 8) y seleccione la última versión creada con la advertencia enter image description here
  2. Ubique la (s) advertencia (es) (busque ” Diseño máximo preferido automático “) y presione el botón expandir a la derecha
    enter image description here
  3. Encuentra la ID del objeto de UILabel enter image description here
  4. Abra Storyboard y SEARCH (CMD + f) para el objeto. SELECCIONARÁ Y DESTACARÁ el UILabel
  5. Establecer ancho preferido = 0 “explícito” como otros sugirieron

La solución es bastante simple

Simplemente habilite Builds para iOS 8 y posterior

enter image description here

Ahora mi versión de Xcode es 6.1. Pero tengo esta advertencia también. me molesta mucho después de la búsqueda una y otra vez. Encontré la solución.

Motivo: Debes haber configurado tus Líneas UILabel> 1 en tu Guión gráfico.

Solución: configure su atributo UILabel Lines en 1 en Storyboard. reinicia tu Xcode. Funciona para mí, espero que pueda ayudar a más personas.

Si realmente necesita mostrar sus 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; 

Para resumir, para mí seguir las dos instrucciones anteriores para cambiar cualquier instancia donde numberOfLines = 0 a 1 o superior, y agregar manualmente preferredMaxLayoutWidth = “0” a cada instancia de una etiqueta dentro del origen del guión gráfico solucionó todas mis advertencias.

Como no tengo una reputación de 50, Stackoverflow no me deja comentar la segunda mejor respuesta. Encontré otro truco para encontrar la etiqueta culpable en 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 vista mostrados y simplemente haga el comando F y comente V y lo llevará directamente a esa etiqueta 🙂

Lo hice funcionar seleccionando el diseño original que tenía en la selección W / H. Storyboard está funcionando como se esperaba y el error se ha ido.

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

Aquí es donde deberías presionar.

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

Al soltar una etiqueta de líneas múltiples, no hay una restricción establecida para imponer el ancho dentro de la vista principal. Aquí es donde entra en juego el nuevo PreferredMaxWidth. En iOS 7 y anteriores, debes definir el ancho máximo tú mismo. Simplemente agregué una restricción de 10 px al lado izquierdo y derecho de la etiqueta.

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

Así que esto no es realmente un error, simplemente tiene que definir el ancho máximo usted mismo. La mención de opción explícita 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 (ya que ha establecido explícitamente el ancho).

Mi solución anterior asegura que el ancho siempre se mantenga sin importar cuán grande sea la vista principal.

Por alguna razón, incluso si 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.

Inspector de archivos en el Xib después de cambiar el objetivo de implementación de iOS

Por lo tanto, debe cambiarlo manualmente para cada Xib Después del cambio manual

Una vez hecho esto, la advertencia desaparecerá 🙂