Sobes.tech
Middle+

À quoi servent les propriétés de 'Priorité de résistance à la compression' ?

sobes.tech IA

Réponse de l'IA

Déterminent à quel point une vue sera réticente à se réduire par rapport à d'autres vues en cas d'espace libre insuffisant.

Propriétés Priorité de Résistance à la Compression :

  • Chaque dimension (Horizontal, Vertical) a sa propre priorité.
  • Plage de valeurs : 1 (la plus basse) à 1000 (la plus haute, UILayoutPriorityRequired).
  • Une vue avec une priorité plus élevée résistera davantage à la compression qu'une vue avec une priorité plus basse.
  • La priorité 1000 garantit que la vue ne sera pas comprimée en dessous de sa taille de contenu intrinsèque dans aucune circonstance, si possible.

Utilisation :

  • Étiquette avec texte dynamique : Si vous avez plusieurs UILabel pouvant afficher des textes de longueurs différentes, l'utilisation des priorités aide à déterminer quelle étiquette sera comprimée en premier si elles ne tiennent pas à l'écran.
  • Boutons : Pour que le texte sur un bouton ne soit pas coupé, vous pouvez définir une priorité élevée pour son UILabel en utilisant Priorité de Résistance à la Compression.
  • Mises en page complexes : Dans des mises en page Auto Layout complexes, les priorités sont utilisées pour résoudre les ambiguïtés en cas de manque d'espace.

Exemple : Deux UILabel dans une pile horizontale.

let label1 = UILabel()
label1.text = "Texte court"
label1.backgroundColor = .red

let label2 = UILabel()
label2.text = "Texte très très très long"
label2.backgroundColor = .blue

let stackView = UIStackView(arrangedSubviews: [label1, label2])
stackView.axis = .horizontal
stackView.distribution = .fill // Remplit l'espace, mais peut compresser le contenu

// Par défaut, les priorités sont identiques (habituellement 750).
// Les deux labels seront compressés proportionnellement.

// On définit une priorité élevée pour label1
label1.setContentCompressionResistancePriority(.required, for: .horizontal) // 1000
// label2 conserve sa priorité par défaut (750)

// Maintenant, en cas de manque d'espace, label2 sera compressé davantage,
// pour que label1 conserve sa taille.

Lien avec Priorité d'Embrassade du Contenu (Content Hugging Priority) :

  • Content Hugging Priority : Détermine à quel point une vue sera réticente à augmenter au-delà de sa taille de contenu intrinsèque lorsqu'il y a de l'espace libre supplémentaire.
  • Haute Content Hugging Priority = la vue "embrasse" son contenu et ne s'étend pas.
  • Haute Compression Resistance Priority = la vue résiste à la compression et ne se réduit pas.

Ces deux propriétés travaillent ensemble pour aider Auto Layout à répartir correctement l'espace entre les vues.