Что такое Content Compression Resistance Priority в Auto Layout?

«Что такое Content Compression Resistance Priority в Auto Layout?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Content Compression Resistance Priority (приоритет сопротивления сжатию) — это значение (UILayoutPriority), которое определяет, насколько элемент интерфейса (например, UILabel или UIButton) будет сопротивляться уменьшению своего внутреннего размера (intrinsicContentSize) ниже естественного, если в системе Auto Layout возникает нехватка пространства.

Принцип работы: Когда два элемента конкурируют за ограниченное пространство, система сжимает тот элемент, у которого ниже приоритет сопротивления сжатию по соответствующей оси (.horizontal или .vertical).

Практический пример с двумя UILabel:

let longLabel = UILabel()
longLabel.text = "Очень длинный текст метки"
// Высокий приоритет = сопротивляется сжатию
longLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)

let shortLabel = UILabel()
shortLabel.text = "Коротко"
// Низкий приоритет = сожмется первым
shortLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

// При нехватке горизонтального пространства:
// 1. Система попытается сжать shortLabel.
// 2. Если сжатия shortLabel недостаточно, система начнет сжимать longLabel,
//    так как его приоритет тоже ниже обязательного (.required).

Значения приоритета по умолчанию:

  • .required: 1000 (системные констрейнты).
  • .defaultHigh: 750 (стандартный высокий).
  • .defaultLow: 250 (стандартный низкий).

Связь с другими приоритетами: Этот приоритет работает в паре с Content Hugging Priority (приоритет «объятия» контента), который определяет, насколько элемент сопротивляется увеличению своего размера сверх естественного. Вместе они управляют поведением элементов на основе их внутреннего содержания.