strings multi localize localizable language generate app ios localization interface-builder xcode9-beta

ios - multi - Xcode 9: "Las restricciones de ancho fijo pueden causar recorte" y otras advertencias de localizaciĆ³n



swift string localization (13)

¡Otra solución rápida!

Para un UIButton al cambiar el título de texto sin formato a Atributo también resolvió mi problema:

Descargué el nuevo Xcode y en Interface Builder tengo muchos problemas con advertencias que dicen cosas como:

Las restricciones de ancho fijo pueden causar recorte

Se parece a esto:

Tengo localización para varios idiomas y entiendo la advertencia de que en otro idioma el tamaño de una etiqueta puede cambiar, pero mi aplicación no tiene este problema. Lo ejecuté y probé en Xcode 8 ayer, estuvo bien. No quiero pasar horas y horas agregando nuevas restricciones inútiles.

¿Alguna solución sugerida?


Swift 4, Xcode 9.1:

Acerca de este problema, creo que su objeto no sabe cuál es la posición central correcta en el contexto de su supervista , y el uso de eliminar, mayor que u otras configuraciones principales / de temblor la mayoría de las veces no funciona correctamente. Primero, debe verificar las restricciones correctas de su supervista.

Si su / s vista / s están configuradas correctamente, puede intentar "explicar" a su objeto cuál es la posición correcta en la vista estableciendo la restricción "horizontalmente en el contenedor" :


Como puede ver en la imagen a continuación, estaba teniendo el error "Las restricciones de ancho fijo pueden causar recorte" porque aunque había configurado mi cuadro de texto para que esté centrado verticalmente y mi etiqueta para tener una restricción de margen izquierdo, no había definido una restricción para el cuadro de texto en relación con la etiqueta, por lo que XCode me alertó de que el cuadro de texto podría recortar (mostrarse arriba) la etiqueta.

Después de agregar la restricción izquierda al cuadro de texto para siempre estar a cierta distancia de la etiqueta, el error fue considerado resuelto por XCode y ya no me molestó con la advertencia de restricción.


Con las Labels , puede establecer Lines 0 y Autoshrink propiedades de Autoshrink es Minimum Font Size para eliminar Fixed Width Constraints May Cause Clipping advertencias de Fixed Width Constraints May Cause Clipping , como esta:


Para las etiquetas y botones que están localizados, esta advertencia tiene sentido y debe proporcionar las restricciones necesarias para que sus etiquetas no se superpongan. Si no se superponen ahora, podrían hacerlo en el futuro, por lo que no será perjudicial proporcionar las restricciones.

Xcode te ayuda a agregar estas restricciones automáticamente:

En el esquema del documento de su guión gráfico, haga clic en la flecha amarilla y elija "inicio fijo" o "seguimiento fijo", dependiendo de dónde esté el texto en su pantalla (izquierda o derecha). Esto lo solucionará para la mayoría de los problemas.

Si tiene este problema con un botón sin texto (solo imagen), intente eliminar el "título predeterminado" que aún podría estar configurado para el botón:


Puede intentar Desactivar "Respetar la dirección del idioma" por restricción para silenciar la advertencia y ver si es útil. Seleccione su restricción y abra Atributos / Inspector de tamaño. Por favor vea la imagen adjunta.

Si no planea localizar su aplicación a otros idiomas, esta solución no debería tener inconvenientes. Para las aplicaciones localizadas, debe ser más consciente de su etiqueta y tamaños de fuente.

ps Esta solución funciona para iOS. Para macOS, intente> = o <= para silenciar la advertencia.

Las etiquetas pps en la imagen a continuación son mucho más fáciles de crear usando AutoLayout y la propiedad atribuidaString en un solo UILabel o UITextView usando NSMutableAttributedString. La imagen es solo para fines de demostración.


Recibía las mismas advertencias incluso sin varios idiomas en mi aplicación , lo que me llevó a descubrir qué estaba pasando realmente. . .

Hay algunas cosas diferentes que suceden aquí. Pude silenciar las advertencias de ancho fijo en mi propia aplicación cambiando el ancho de los espacios entre objetos de ancho fijo a mayor o igual o menor o igual .

Esto se puede hacer seleccionando el objeto en el generador de interfaces, yendo al inspector de tamaño y cambiándolo allí:

O seleccione la restricción del esquema del documento, vaya al inspector de tamaño y cámbiela allí:

En cuanto a la advertencia en la parte superior de la captura de pantalla:

Las restricciones iniciales y finales fijas con una restricción central pueden causar recorte

Aquí hay una captura de pantalla de mi propia aplicación en la que recibía exactamente la misma advertencia:

Tenía la etiqueta con el signo @ establecido al inicio y al final de los botones, pero también para alinear el centro con la etiqueta de clasificación . Una vez que eliminé la restricción de alineación central , la advertencia desapareció, pero me quedé con un conjunto de objetos mal distribuidos.

Es entonces cuando me resigné a adoptar la Vista de pila . Tan molesto como es de usar, cuando obtienes todas las restricciones y configuraciones correctas, se presenta maravillosamente y sin advertencias.

Editar

Como Repose escribe en los comentarios, a veces simplemente agregar> = 0 será lo que necesita, ya que se asegura de que dos elementos no se superpongan.


Sé que esta pregunta ya ha sido respondida, pero lo que hice para solucionar este error en mi caso fue agregar la propiedad "Relación de aspecto" y luego eliminar la restricción de ancho o alto, esto funcionó bastante bien y fue menos esfuerzo, y logré mantener la misma salida y adaptar mi vista para los diferentes dispositivos.


Si necesita una restricción de ancho fija para el botón, simplemente establezca la prioridad de restricción de ancho en 700 .


Tuve el mismo problema cuando me mudé a Xcode 9 y encontré un enfoque que es útil para ciertos tipos de diseños. En mi caso, quería un encabezado de tabla en el que dos columnas (UILabels) fueran de ancho fijo y otra de ancho variable. Independientemente de cómo especifiqué los anchos de columna (incluido el uso de restricciones mayores o iguales en lugar de iguales, etc.), seguía recibiendo la advertencia sobre un posible recorte. En mi caso, quería que la columna de ancho variable (UILabel) se recortara si fuera necesario. Podría haber ignorado la advertencia, pero no me gusta hacer eso.

El enfoque que funcionó aquí fue crear una UIView con restricciones de tamaño apropiadas e incrustar la UILabel como una subvista en la UIView. Entonces ocurre el truncamiento si es necesario y no recibo ninguna advertencia. Esto funciona si UIView / UILabel incrustado está en un StackView o no.

Este es esencialmente el mismo enfoque que el de Haroldo Gondim, pero aquí puede ver que también funciona con o sin StackView.

La siguiente imagen muestra el enfoque, con y sin StackView. "SpacerName" es un UIView de ancho variable que contiene una etiqueta y "SpacerPD" es uno con un ancho fijo de 80. [Los colores no son significativos; solo para mostrar dónde están las vistas.]


Tuve el mismo problema, pero cuando cambio a >= establece automáticamente la constante en 0 , si elijo 60 por ejemplo, la advertencia aparece nuevamente. Así que estaba al tanto del problema.

Podría arreglar incrustar mi Label en una View

Editor > Embed In > View

En la Label , configuro Top , Bottom , Leading y Trailing con constant = 0

En View configuré las constraints que esperaba antes.


Tuve un problema similar al intentar tener el botón con el mismo relleno desde los bordes de la supervista.

Terminé usando la restricción horizontal center y la restricción de equal widths a la super view .


Para corregir el error : las restricciones de ancho fijo pueden causar recorte ”y otra localización. Debe seleccionar la vista / objeto, ir al" Mostrar inspector de tamaño ", encontrar la restricción de ancho y establecer la constante en Mayor o igual a:



Para corregir el error : falta la restricción inicial / final, lo que puede provocar la superposición con otras vistas

Esto significa que la vista / objeto de Xcode se queja, le falta una restricción inicial o final a una vista vecina.

Mientras mantiene el control, arrastre a una vista / objeto cercano



Agregar una restricción inicial o final