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:
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?
Respuestas:
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:
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.
fuente
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.
fuente
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:
fuente
UIButton
aStoryboard
, eldefault button
título serábutton
.Con
Labels
, puede establecerLines
es0
yAutoshrink
propiedades esMinimum Font Size
eliminarFixed Width Constraints May Cause Clipping
advertencias, como esta:fuente
¡Otra solución rápida!
Para un UIButton al cambiar el título de texto sin formato a Atributo también resolvió mi problema:
fuente
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.
fuente
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" :
fuente
Si necesita una restricción de ancho fija para el botón, simplemente establezca la prioridad de restricción de ancho en
700
.fuente
Tuve el mismo problema, pero cuando cambio a
>=
él, establezco automáticamente la constante en0
, si elijo60
por ejemplo, la advertencia aparece nuevamente. Así que estaba al tanto del problema.Podría arreglar incrustar mi
Label
en unView
En
Label
conjunto ITop
,Bottom
,Leading
yTrailing
conconstant = 0
En
View
configurar elconstraints
que esperaba antes.fuente
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.]
fuente
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.
fuente
Tuve un problema similar al intentar tener el botón con el mismo relleno desde los bordes de la supervista.
Terminé usando
horizontal center
restricción yequal widths
restricción a lasuper view
.fuente
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 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
Agregar una restricción inicial o final
fuente