Sobes.tech
Middle+

Para que servem as propriedades de 'Prioridade de resistência à compressão'?

sobes.tech IA

Resposta da IA

Determinando até que ponto uma vista será relutante em diminuir-se em comparação com outras vistas quando há espaço livre insuficiente.

Propriedades Prioridade de Resistência à Compressão:

  • Cada dimensão (Horizontal, Vertical) tem sua própria prioridade.
  • Faixa de valores: 1 (mais baixo) até 1000 (mais alto, UILayoutPriorityRequired).
  • Uma vista com prioridade mais alta resistirá mais à compressão do que uma vista com prioridade mais baixa.
  • A prioridade 1000 garante que a vista não será comprimida abaixo do seu tamanho de conteúdo intrínseco em nenhuma circunstância, se possível.

Uso:

  • Etiqueta com texto dinâmico: Se tiver várias UILabels que podem exibir textos de diferentes comprimentos, usar prioridades ajuda a determinar qual será comprimida primeiro se não couberem na tela.
  • Botões: Para que o texto num botão não seja cortado, pode definir uma prioridade alta para o seu UILabel usando Prioridade de Resistência à Compressão.
  • Layouts complexos: Em layouts Auto Layout complexos, as prioridades são usadas para resolver ambiguidades quando há falta de espaço.

Exemplo: Dois UILabels numa pilha horizontal.

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

let label2 = UILabel()
label2.text = "Texto muito muito muito longo"
label2.backgroundColor = .blue

let stackView = UIStackView(arrangedSubviews: [label1, label2])
stackView.axis = .horizontal
stackView.distribution = .fill // Preenche o espaço, mas pode comprimir o conteúdo

// Por padrão, as prioridades são iguais (normalmente 750).
// Ambos os labels serão comprimidos proporcionalmente.

// Definimos uma prioridade alta para label1
label1.setContentCompressionResistancePriority(.required, for: .horizontal) // 1000
// label2 mantém a sua prioridade padrão (750)

// Agora, na falta de espaço, label2 será comprimido mais,
// para que label1 mantenha o seu tamanho.

Relação com Prioridade de Abraço do Conteúdo (Content Hugging Priority):

  • Content Hugging Priority: Define até que ponto uma vista será relutante em aumentar além do seu tamanho de conteúdo intrínseco quando há espaço livre adicional.
  • Alta Content Hugging Priority = a vista "abraça" o seu conteúdo e não se expande.
  • Alta Compression Resistance Priority = a vista resiste à compressão e não se reduz.

Estas duas propriedades trabalham juntas para ajudar o Auto Layout a distribuir corretamente o espaço entre as vistas.