Для чего в UIKit используется свойство contentCompressionResistancePriority?

Ответ

contentCompressionResistancePriority определяет приоритет, с которым представление (view) сопротивляется сжатию своего размера ниже его intrinsicContentSize.

Зачем это нужно? В Auto Layout при нехватке пространства система должна решить, какое из представлений сжать. Свойство задает «силу сопротивления» сжатию по горизонтальной (.horizontal) или вертикальной (.vertical) оси.

Практический пример: Два лейбла (label1, label2) расположены в одной строке, и их суммарная ширина превышает ширину супервью.

// label1 важнее, его текст должен быть виден полностью.
label1.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
// label2 может быть обрезан или сжат.
label2.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

В этой ситуации система сожмет (обрежет) label2, так как его приоритет сопротивления сжатию ниже.

Ключевые моменты:

  • Приоритеты: Задаются через UILayoutPriority в диапазоне от 1 до 1000. Стандартные значения: .required (1000), .defaultHigh (750), .defaultLow (250).
  • Значение по умолчанию: .defaultHigh (750) для всех осей.
  • Антагонист: contentHuggingPriority — приоритет сопротивления РАСТЯЖЕНИЮ сверх intrinsicContentSize.