Sobes.tech
Middle+

¿Para qué sirven las propiedades de 'Prioridad de resistencia a la compresión'?

sobes.tech AI

Respuesta de la IA

Determinan qué tan reacia será una vista a reducirse en comparación con otras vistas cuando hay espacio libre insuficiente.

Propiedades Prioridad de Resistencia a la Compresión:

  • Cada dimensión (Horizontal, Vertical) tiene su propia prioridad.
  • Rango de valores: 1 (el más bajo) hasta 1000 (el más alto, UILayoutPriorityRequired).
  • Una vista con una prioridad más alta resistirá más la compresión que una vista con una prioridad más baja.
  • La prioridad 1000 garantiza que la vista no será comprimida por debajo de su tamaño de contenido intrínseco en ninguna circunstancia, si es posible.

Uso:

  • Etiqueta con texto dinámico: Si tienes varias UILabel que pueden mostrar textos de diferentes longitudes, usar prioridades ayuda a determinar qué etiqueta se comprimirá primero si no caben en la pantalla.
  • Botones: Para que el texto en un botón no se corte, puedes establecer una prioridad alta para su UILabel usando Prioridad de Resistencia a la Compresión.
  • Diseños complejos: En diseños complejos de Auto Layout, las prioridades se usan para resolver ambigüedades cuando hay falta de espacio.

Ejemplo: Dos UILabel en una pila horizontal.

let label1 = UILabel()
label1.text = "Texto corto"
label1.backgroundColor = .red

let label2 = UILabel()
label2.text = "Texto muy muy muy largo"
label2.backgroundColor = .blue

let stackView = UIStackView(arrangedSubviews: [label1, label2])
stackView.axis = .horizontal
stackView.distribution = .fill // Llena el espacio, pero puede comprimir el contenido

// Por defecto, las prioridades son iguales (usualmente 750).
// Ambos labels se comprimirán proporcionalmente.

// Establecemos una prioridad alta para label1
label1.setContentCompressionResistancePriority(.required, for: .horizontal) // 1000
// label2 mantiene su prioridad por defecto (750)

// Ahora, si falta espacio, label2 se comprimirá más,
// para que label1 conserve su tamaño.

Relación con Prioridad de Abarcamiento de Contenido (Content Hugging Priority):

  • Content Hugging Priority: Define qué tan reacia será una vista a aumentar más allá de su tamaño de contenido intrínseco cuando hay espacio libre adicional.
  • Alta Content Hugging Priority = la vista "abraza" su contenido y no se expande.
  • Alta Compression Resistance Priority = la vista resiste la compresión y no se reduce.

Estas dos propiedades trabajan juntas para ayudar a Auto Layout a distribuir correctamente el espacio entre las vistas.