for features ios iphone cocoa-touch interface-builder autolayout

features - xcode version for ios 12



Ancho igual y espaciado igual entre botones en autolayout (4)

Ajuste:
- anchos iguales de todos los botones
- espaciado horizontal entre todos los botones
- lo que lleva a la supervisión del primer botón y al final de la supervisión del último botón
debe hacer el trabajo A menos que tenga problemas con la supervisión (por ejemplo, las restricciones que faltan en ScrollView)

Estoy tratando de usar restricciones de reproducción automática para cambiar automáticamente el tamaño de algunos botones de tamaño similar en una vista para dar el siguiente efecto:

Antes de redimensionar

Efecto deseado después de cambiar el tamaño

Como puede ver, quiero que los botones sean del mismo tamaño y también quiero que el espacio entre cada botón sea una constante de 20 puntos. Parece bastante simple al principio, así que establezco las siguientes restricciones:

  • Botones: espacio del vecino izquierdo = 20 (incluidos los botones más a la izquierda y más a la derecha)
  • Botones: espacio del vecino derecho = 20 (incluidos los botones que están más a la izquierda y más a la derecha)
  • Botones: mismo ancho

Lo que realmente sucede después de cambiar el tamaño

Cuando estoy en la vista previa o cuando pruebo ejecutar la aplicación en mi iPhone / simulador, el botón cambia de tamaño y ni siquiera sigue la misma restricción de ancho que le puse. De hecho, la vista que contiene las vistas también cambia de tamaño para adaptarse a los nuevos tamaños de botones. ¿Alguien sabe cómo solucionar este problema únicamente en el generador de interfaces?


En el generador de interfaces, establece las restricciones de espaciado entre los botones como se describe anteriormente. Luego, puede seleccionarlos todos por comando y especificar la restricción "Ancho igual" para aplicar a los objetos seleccionados.


Este problema parece deberse a una content hugging priority incorrecto y una content compression Resistance priority . Por lo tanto, debe establecerlos como abrazos de bajo contenido y alta resistencia a la compresión (todos deben tener el mismo valor).

Debido a que la inclusión de contenido es la propiedad que resiste una vista para crecer y la compresión de contenido, la prioridad de resistencia es resistir una vista para reducirla. Para más información sobre estos puede encontrar esta Question .


Finalmente tengo el olvido de cómo resolver este problema. He probado que funciona como el encanto.

  1. agregar restricciones a los elementos de espacio con 20 unidades de margen
  2. añadir restricción a las edades
  3. ahora parte complicada
    • para cada elemento, agregue restricciones de ancho igual a un padre
    • Selecciona todas estas nuevas restricciones y cambia sus propiedades.
    • establecer el multiplicador a valor 1:5
    • establezca la constante en -24 (6 separación entre elementos y el borde principal da 120 , esto multiplicado por el valor multiplicador 1:5 da 24 )
    • actualizar marcos de elementos

¡Eso es! La imagen de abajo muestra cómo funciona en el constructor de interfaces:

Establezca el tamaño simulado en "forma libre" y pruebe diferentes anchos (lo establezco en 330 ).