El ancho de diseño Máximo 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 de diseño Máximo Preferido automático no está disponible en las versiones de iOS antes de 8.0

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

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

Author: Daniel Galasko, 2014-08-20

10 answers

Actualizar 3:
Esta advertencia también se puede activar con etiquetas que tienen numberOfLines establecido en cualquier cosa menos 1 si su destino de implementación está establecido 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, objective-c
  2. Establezca el Destino de implementación en 7.1
  3. Abra el storyboard del proyecto
  4. Coloque una etiqueta en el controlador de vista proporcionado
  5. Establecer el número de líneas para esa etiqueta a 2.
  6. Compilar

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

Actualizar 2:
Desafortunadamente, esto es una cosa de nuevo en la versión de lanzamiento de Xcode 6. Tenga en cuenta que puede, en su mayor parte, editar manualmente su storyboard/xib para solucionar el problema. Por Charles A. en los comentarios a continuación:

Vale la pena mencionar que puedes fácilmente accidentalmente introducir esta advertencia, y la advertencia en sí no ayuda a encontrar la etiqueta que es el culpable. Esto es desafortunado en un complejo storyboard. Puede abrir el guion gráfico como un archivo de origen y buscar con la expresión regular <label(?!.*preferredMaxLayoutWidth) para encontrar etiquetas que omita un atributo/valor preferredMaxLayoutWidth. Si añades preferredMaxLayoutWidth = " 0 " en tales líneas, es lo mismo que marcar explicit y estableciendo el valor 0.

Actualizar 1:
Este error ha sido corregido en Xcode 6 GM.

Original Respuesta
Este es un error en Xcode6-Beta6 y XCode6-Beta7 y puede ser ignorado de forma segura por ahora.

Un ingeniero de Apple en los foros de desarrolladores de Apple tenía esto para decir sobre el error:

Preferred max layout width es una propiedad de diseño automático en UILabel que le permite crecer verticalmente automáticamente para adaptarse a su contenido. Versiones de Xcode anteriores a 6.0 establecerían preferredMaxLayoutWidth para etiquetas multilínea al tamaño actual de los límites en el momento del diseño. Usted gustar necesidad de actualizar manualmente preferredMaxLayoutWidth en tiempo de ejecución si su diseño horizontal cambiado.

IOS 8 agregado soporte para computación automática preferredMaxLayoutWidth en tiempo de ejecución, lo que hace que la creación de multilínea etiquetas aún más fáciles. Esta configuración no es compatible con iOS 7. Para admitir iOS 7 e iOS 8, Xcode 6 le permite elegir "Automático" o "Explícito" para preferredMaxLayoutWidth en el tamaño inspector. Usted debe:

Elige "Automático" si se dirige a iOS 8 para la mejor experiencia. Recoger "Explícito" si la orientación es

La advertencia aparecerá si (1) está utilizando auto layout, (2) "Automático" está configurado para una etiqueta multilínea [puede comprobarlo en el inspector de tamaño para la etiqueta], y (3) su destino de implementación

Parece Que el error es que esta advertencia aparece para no autodiseño documento. Si está viendo esta advertencia y no está utilizando el diseño automático puede ignorar la advertencia.

Alternativamente, puede solucionar el problema utilizando el inspector de archivos en el guion gráfico o xib en cuestión y cambiar "Compilaciones para" a " Compilaciones para iOS 8.0 y versiones posteriores" Inspector de archivos Xcode

 373
Author: memmons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:39

Para Encontrar la etiqueta del problema en un guion gráfico grande, siga mis pasos a continuación.

  1. En el Navegador de problemas de xCode, haga clic derecho en el error y seleccione "Revelar en el registro". (Nota: @Sam sugiere a continuación, busque en xCode report navigator. 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).

introduzca la descripción de la imagen aquí

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

introduzca la descripción de la imagen aquí

  1. A continuación, revela tu storyboard como archivo fuente. introduzca la descripción de la imagen aquí

  2. Busca. Usted debe ser capaz de decir qué etiqueta es desde aquí con bastante facilidad mirando el contenido. introduzca la descripción de la imagen aquí

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

introduzca la descripción de la imagen aquí

Por cierto, siempre puede obtener rápidamente el id de una interfaz elemento seleccionando el elemento y mirando debajo del inspector de identificación. Muy práctico.

introduzca la descripción de la imagen aquí

 315
Author: smileBot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-27 19:36:44

Puede solucionar este problema sin abrir el guion gráfico como fuente. Esta advertencia se activa por UILabels si numberOfLines !=1 y el objetivo de implementación es

¿CÓMO ENCONTRARLO?

  1. Vaya a Issue Navigator (CMD + 8) y Seleccione latest built con la advertencia introduzca la descripción de la imagen aquí
  2. Localice la(s) advertencia (s) (busque "Diseño máximo Preferido automático") y presione el botón expandir a la derecha
    introduzca la descripción de la imagen aquí
  3. Encuentra el Objeto ID del UILabel introduzca la descripción de la imagen aquí
  4. Abra el Storyboard y BUSQUE (CMD+f) el objeto. SELECCIONARÁ Y RESALTARÁ la etiqueta UILabel
  5. Set Preferred Width = 0"Explicit" as others suggested
 37
Author: Tibidabo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-01 18:58:28

Solución es bastante simple

Solo habilita Compilaciones para iOS 8 y Posteriores

introduzca la descripción de la imagen aquí

 23
Author: Alejandro Luengo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-19 10:27:45

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.

Razón:Debe haber establecido sus líneas UILabel > 1 en su guion gráfico.

Solución: establezca su atributo UILabel Lines en 1 en Storyboard. reinicia tu 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;
 4
Author: ronan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-06 03:31:20

Para resumir, para mí seguir 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 guion gráfico arregló todas mis advertencias.

 4
Author: Lynn S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-09 15:48:54

Dado que no tengo una reputación 50 Stackoverflow no me deja comentar sobre la segunda mejor respuesta. Encontré otro truco para encontrar la etiqueta culpable en el guion gráfico.

Así que una vez que conozca el id de la etiqueta, abra su guion gráfico en una pestaña separada con los controladores de vista mostrados y simplemente haga el comando F y el comando V y lo llevará directamente a esa etiqueta:)

 3
Author: Junaid Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-07 01:59:33

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

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

Aquí es donde debes presionar.

 2
Author: AarneHuttunen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-22 14:39:21

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

Cuando se suelta una etiqueta multilínea, no hay una restricción establecida para imponer el ancho dentro de la vista padre. Aquí es donde el nuevo PreferredMaxWidth entra en juego. En iOS 7 y anteriores tienes que definir el ancho máximo tú mismo. Simplemente agregué una restricción de 10px al lado izquierdo y derecho de la etiqueta.

También puede agregar una restricción

Así que esto no es realmente un error, simplemente tiene que definir el ancho máximo usted mismo. La opción mención explícita en otra respuesta también funcionará cuando esté configurando 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 padre.

 1
Author: Matthew Cawley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-18 13:29:04

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

Inspector de archivos en el Xib después de cambiar el destino 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á: -)

 1
Author: Gutty1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-01 12:23:21