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