Xcode 9: "Las restricciones de ancho fijo pueden causar recorte" y otras advertencias de localización

148

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

Las restricciones de ancho fijo pueden causar recorte

Se parece a esto:

ingrese la descripción de la imagen aquí

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?

Dave G
fuente
Te sugiero que mires a autoresizing
Dark Innocence
3
Igual que aquí. Hay botones que garantizan un ancho de 50 puntos en todos los idiomas. ¿Por qué ensuciar mi boleta de calificaciones de autoextracción limpia con esto?
John Scalo
9
Este es definitivamente un gran problema, y ​​es sorprendente que no se hable más al respecto: O
Fattie
2
Recibo este error incluso teniendo solo la localización en inglés.
Sombras
66
Para otros, si NO tiene ninguna localización y simplemente quiere que estas advertencias desaparezcan, mueva su guión gráfico de la carpeta Base.iproj como se indica aquí: stackoverflow.com/a/45040394/1807644
William T.

Respuestas:

179

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í:

ingrese la descripción de la imagen aquí


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

ingrese la descripción de la imagen aquí



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:

ingrese la descripción de la imagen aquí

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.

Sombras
fuente
2
> = 0 previene la superposición y los problemas de superposición corregidos que tenía antes, al convertir el inicio / finalización a derecha / izquierda se solucionó el error de recorte para mí. Los resultados pueden variar. Consulte a su médico antes de comenzar cualquier desarrollo de software.
Reposar el
@Reponer exactamente. Piense en lo que puede salir mal y agregue una restricción para asegurarse de que no ocurra.
Sombras
Renunciar a usar Stack View en iOS tal vez esté bien, pero para OS X (lo siento MacOS) no siempre es una buena opción. Apple debería saberlo. El concepto de UI y UX a menudo tiene diferentes supuestos.
Joannes
2
Estoy de acuerdo con abrazar el UIStackView. Definitivamente ha sido un dolor e intenté hacerlo con un par de restricciones, agregué otro UIStackView y se presentó perfecto.
templeman15
1
¿Hay alguna otra opción? ¿Qué sucede si deseo que mi control sea de ancho fijo?
Kampai
60

Puede intentar Desactivar "Respetar la dirección del idioma" según la 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, entonces 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.

Falta de respeto Dirección del idioma

Reposo
fuente
1
Se corrigió el problema "Restricciones iniciales y finales fijas con una restricción central que pueden causar recorte" para mí. ¡Gracias!
toddg
44
Si ha intentado esto y no parece tener ningún efecto, intente salir de Xcode y reiniciarlo. Ese truco funcionó para mí.
T'Pol
2
No me dejará anular esta selección.
Scooter
1
¡Perfecto! esto funcionó para mí y no es necesario cambiar mis limitaciones, ¡gracias!
rgkobashi
1
> = las restricciones tuvieron efectos negativos para mí debido a varios esquemas de prioridad complejos. Estaba preparado para insertar mi etiqueta en una vista, ¡pero luego encontré su solución que funcionó! Gracias :)
KerCodex
33

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.

Captura de pantalla de Xcode

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:

Captura de pantalla de Xcode

Pascal
fuente
44
En mi caso, eliminar el título predeterminado eliminó la advertencia. ¡Gracias!
Reinhard Männer el
Tenga en cuenta que cuando agrega un UIButtona Storyboard, el default buttontítulo será button.
Miguel Tepale
29

Con Labels, puede establecer Lineses 0y Autoshrinkpropiedades es Minimum Font Sizeeliminar Fixed Width Constraints May Cause Clippingadvertencias, como esta:

ingrese la descripción de la imagen aquí

Rey Leon
fuente
3
Sí, solo necesita establecer líneas en 0.
Reefwing
2
La configuración de líneas a 0 hace que la etiqueta se expanda a tantas líneas como sea necesario, lo que puede no ser lo que desea.
nickdnk
@nickdnk: sé que, si arreglaste la restricción de altura para la etiqueta, no se expandirá.
Lionking
21

¡Otra solución rápida!

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

ingrese la descripción de la imagen aquí

tryKuldeepTanwar
fuente
¡Trabajado como un encanto!
artesanal
7

Sé que esta pregunta ya ha sido respondida, pero lo que hice para corregir 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.

reojasado
fuente
4

Swift 4, Xcode 9.1:

Sobre este problema, creo que su objeto no sabe cuál es la posición central correcta en el contexto de su supervista , y usando remove, mayor que 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" :

ingrese la descripción de la imagen aquí

Alessandro Ornano
fuente
2

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

ChikabuZ
fuente
1

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

Podría arreglar incrustar mi Labelen unView

Editor > Embed In > View

En Labelconjunto I Top, Bottom, Leadingy Trailingconconstant = 0

restricciones

En Viewconfigurar el constraintsque esperaba antes.

Haroldo Gondim
fuente
1

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 allí para mostrar dónde están las vistas.]

ingrese la descripción de la imagen aquí

Tom Linton
fuente
0

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.

ingrese la descripción de la imagen aquí

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.

Ulises Alves
fuente
0

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

Caso de error

Terminé usando horizontal centerrestricción y equal widthsrestricción a la super view.

Mi solución

Pei
fuente
-1

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:

Inspector de tallas

Para arreglar 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

Contrl + PressClick

Agregar una restricción inicial o final

Restricción inicial / final

Manny
fuente
Si hace clic en el triángulo de advertencia, Xcode los creará automáticamente con un solo clic.
lensovet