El ancho de layout máximo preferido automático no está disponible en las versiones de iOS anteriores a 8.0

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

El ancho de layout máximo preferido automático no está disponible en las versiones de iOS anteriores a 8.0

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

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

Actualización 3:
Esta advertencia también puede activarse mediante tags que tienen numberOfLines configuradas en cualquier cosa less 1 si su destino de deployment se establece en 7.1. Esto es completamente reproducible con un nuevo proyecto de vista única.

Pasos para reproducir:

  1. Cree un nuevo proyecto single-view, objective-c
  2. Establezca el objective de implementación en 7.1
  3. Abra el storyboard del proyecto.
  4. Coloque una label en el controller de vista provisto.
  5. Establezca numberOfLines para esa label 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 Xcode 6. Tenga en count que, en su mayor parte, puede editar manualmente su storyboard / xib para solucionar el problema. Según Charles A. en los comentarios a continuación:

Vale la pena mencionar que fácilmente puede introducir esta advertencia accidentalmente, y la advertencia en sí misma no ayuda a encontrar la label que es el culpable. Esto es desafortunado en un storyboard complejo. Puede abrir el guión gráfico como un file fuente y search con el regex <label(?!.*prefernetworkingMaxLayoutWidth) para search tags que omitan un atributo / valor preferido de MaxLayoutWidth. Si agrega en prefernetworkingMaxLayoutWidth = "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 por ahora.

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

El ancho de layout máximo preferido es una propiedad de layout 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 prefernetworkingMaxLayoutWidth para tags multilínea en el tamaño de los límites actuales en el momento del layout. Debería actualizar manualmente prefernetworkingMaxLayoutWidth en time de ejecución si cambió su layout horizontal.

iOS 8 agregó soporte para computar automáticamente el modo PrefernetworkingMaxLayoutWidth en time de ejecución, lo que hace que la creación de tags de varias líneas sea aún más fácil. Esta configuration no es compatible con iOS 7. Para admitir tanto iOS 7 como iOS 8, Xcode 6 le permite elegir "Automático" o "Explícito" para el MaxMayoutWidth preferido en el inspector de tamaño. Debieras:

Seleccione "Automático" si selecciona iOS 8 para get la mejor experiencia. Elija "Explícita" si selecciona <iOS 8. A continuación, puede ingresar el valor de prefernetworkingMaxLayoutWidth que desea establecer. Habilitar los valores pnetworkingeterminados "explícitos" al tamaño de los límites actuales en el momento en que marcó el recuadro.

La advertencia aparecerá si (1) está utilizando el layout automático, (2) "Automático" está configurado para una label de líneas múltiples [puede verificar esto en el inspector de tamaño para la label] y (3) su objective 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 ve esta advertencia y no usa el layout automático, puede ignorar la advertencia.

Alternativamente, puede solucionar el problema utilizando el inspector de files en el storyboard o xib en cuestión y cambie "Builds for" a "Builds for iOS 8.0 y posterior" Inspector de archivos Xcode

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

  1. En xCode's Issue Navigator, haga clic derecho en el error y select "Mostrar en logging". (Nota: @Sam sugiere a continuación, busque en el browser de informes de xCode. También @Rivera observa en los comentarios que "A partir de Xcode 6.1.1, onclick en la advertencia, se abrirá automáticamente y resaltará la label conflictiva". No he probado esto )

introduzca la descripción de la imagen aquí

  1. Esto mostrará el error con un código al final de su file de storyboard. Copie el valor después de .storyboard

introduzca la descripción de la imagen aquí

  1. Luego, revela tu storyboard como file fuente. introduzca la descripción de la imagen aquí

  2. Buscar. Debería poder decir qué label es desde aquí con bastante facilidad mirando el contenido. introduzca la descripción de la imagen aquí

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

introduzca la descripción de la imagen aquí

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

introduzca la descripción de la imagen aquí

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

¿CÓMO ENCONTRARLO?

  1. Vaya a Issue Navigator (CMD + 8) y select Último construido con la advertencia introduzca la descripción de la imagen aquí
  2. Localice las advertencias ( busque " Diseño máximo preferido automático ") y presione el button expandir a la derecha
    introduzca la descripción de la imagen aquí
  3. Encuentra la Id. De object del UILabel introduzca la descripción de la imagen aquí
  4. Abra el Storyboard y SEARCH (CMD + f) para el object. SELECCIONARÁ Y DESTACARÁ el UILabel
  5. Establecer Ancho Preferido = 0 "Explícita" como otros sugieren

Solución es bastante simple

Simplemente activa Builds para iOS 8 y posterior.

introduzca la descripción de la imagen aquí

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

Motivo: debe haber configurado sus líneas UILabel> 1 en su Storyboard.

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 mayor, y agregar manualmente prefernetworkingMaxLayoutWidth = "0" a cada instancia de una label dentro de la fuente del guión gráfico, corrigió todas mis advertencias.

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

Entonces, una vez que sepa el id de la label, abra su storyboard en una pestaña separada con los controlleres de visualización visualizados y simplemente haga el command F y el command V y lo llevará directamente a esa label 🙂

Lo conseguí seleccionando el layout original que tenía en la selección W / H. Storyboard funciona como se esperaba y el error desaparece.

También asegúrese de que está desarrollando para iOS 8.0. Compruebe que desde la configuration general del proyecto.

Aquí es donde debes presionar.

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

Al colocar una label multilínea, no hay un set de restricciones para aplicar el ancho dentro de la vista principal. Aquí es donde entra en juego el nuevo PrefernetworkingMaxWidth. En iOS 7 y versiones anteriores, debe definir el ancho máximo usted mismo. Simplemente agregué una restricción de 10px a los lados izquierdo y derecho de la label.

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

Entonces, esto no es realmente un error, simplemente tiene que definir el ancho máximo usted mismo. La opción explícita mencionada en otra respuesta también funcionará a medida que va configurando este valor de ancho; sin embargo, tendrá que modificar este valor si desea que el ancho máximo cambie en function del ancho primario (como ha establecido explícitamente el ancho).

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

Por alguna razón, incluso si cambia el Objetivo de implementación de iOS a 8.0 o superior, los files Xib no adoptan ese cambio y permanecen con las configuraciones anteriores en el Inspector de files

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

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

Una vez hecho esto, la advertencia desaparecerá 🙂