Что такое Content Hugging Priority в Auto Layout (UIKit)?

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

Ответ

Content Hugging Priority (CHP) — это приоритет «сопротивления растяжению» представления в Auto Layout. Он определяет, насколько сильно представление будет сопротивляться увеличению своего размера сверх его внутреннего (intrinsicContentSize) или минимально необходимого.

Принцип работы:

  • Высокий CHP: Представление предпочтет остаться как можно ближе к своему внутреннему размеру и не будет растягиваться, если есть свободное место.
  • Низкий CHP: Представление охотно растянется, чтобы заполнить доступное пространство.

Классический пример: UILabel рядом с UITextField.

let label = UILabel()
label.text = "Имя:"
// Высокий приоритет: метка не хочет растягиваться.
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)

let textField = UITextField()
textField.placeholder = "Введите имя"
// Низкий приоритет: поле готово растянуться и занять оставшееся место.
textField.setContentHuggingPriority(.defaultLow, for: .horizontal)

В горизонтальном стеке с ограниченной шириной метка сохранит компактный размер, а текстовое поле займет всю оставшуюся ширину.

Важные детали:

  1. Ось: Приоритет задается отдельно для горизонтальной (.horizontal) и вертикальной (.vertical) осей.
  2. Диапазон: Значения от 1 до 1000. Чем больше число, тем выше приоритет и сильнее сопротивление растяжению.
  3. Значение по умолчанию: 250 для всех осей у большинства представлений.
  4. Парная метрика: CHP работает в связке с Compression Resistance Priority (CRP), которая определяет сопротивление сжатию ниже внутреннего размера. Алгоритм Auto Layout при распределении свободного места: Сначала удовлетворяются все обязательные (required, 1000) ограничения, затем свободное пространство распределяется между представлениями, начиная с тех, у кого ниже CHP.