Sobes.tech
Middle+

A cosa servono le proprietà di 'Priorità di resistenza alla compressione'?

sobes.tech AI

Risposta dell'AI

Determinano quanto una vista sarà riluttante a ridursi rispetto ad altre viste in caso di spazio libero insufficiente.

Proprietà Priorità di Resistenza alla Compressione:

  • Ogni dimensione (Orizzontale, Verticale) ha la propria priorità.
  • Intervallo di valori: 1 (più basso) fino a 1000 (più alto, UILayoutPriorityRequired).
  • Una vista con priorità più alta resisterà più alla compressione rispetto a una con priorità più bassa.
  • La priorità 1000 garantisce che la vista non venga compressa al di sotto delle sue dimensioni di contenuto intrinseco in nessuna circostanza, se possibile.

Utilizzo:

  • Etichette con testo dinamico: Se hai più UILabel che possono mostrare testi di lunghezze diverse, usare le priorità aiuta a determinare quale etichetta verrà compressa per prima se non ci sta nello schermo.
  • Pulsanti: Per evitare che il testo su un pulsante venga tagliato, puoi impostare una priorità alta per il suo UILabel usando Priorità di Resistenza alla Compressione.
  • Layout complessi: Nei layout complessi di Auto Layout, le priorità vengono usate per risolvere ambiguità in caso di mancanza di spazio.

Esempio: Due UILabel in uno stack orizzontale.

let label1 = UILabel()
label1.text = "Testo breve"
label1.backgroundColor = .red

let label2 = UILabel()
label2.text = "Testo molto molto molto lungo"
label2.backgroundColor = .blue

let stackView = UIStackView(arrangedSubviews: [label1, label2])
stackView.axis = .horizontal
stackView.distribution = .fill // Riempe lo spazio, ma può comprimere il contenuto

// Per impostazione predefinita, le priorità sono uguali (di solito 750).
// Entrambe le etichette verranno compresse proporzionalmente.

// Imposta alta priorità per label1
label1.setContentCompressionResistancePriority(.required, for: .horizontal) // 1000
// label2 mantiene la sua priorità di default (750)

// Ora, in caso di spazio insufficiente, label2 verrà compressa di più,
// affinché label1 mantenga la sua dimensione.

Relazione con Priorità di Abbraccio del Contenuto (Content Hugging Priority):

  • Content Hugging Priority: Determina quanto una vista sarà riluttante ad aumentare oltre la sua dimensione di contenuto intrinseco quando c'è spazio libero in eccesso.
  • Alta Content Hugging Priority = la vista "abbraccia" il suo contenuto e non si espande.
  • Alta Compression Resistance Priority = la vista resiste alla compressione e non si riduce.

Queste due proprietà lavorano insieme per aiutare Auto Layout a distribuire correttamente lo spazio tra le viste.