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

Ответ

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

Зачем это нужно? В Auto Layout при избытке свободного пространства система решает, какое из представлений растянуть. Это свойство задает «желание» view оставаться компактным.

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

// titleLabel "обнимает" свой контент, не хочет растягиваться.
titleLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
// valueLabel имеет низкий приоритет "объятия", поэтому растянется.
valueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)

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

  • Приоритеты: Задаются через UILayoutPriority (1...1000). Стандартные значения: .required (1000), .defaultHigh (750), .defaultLow (250).
  • Значение по умолчанию: .defaultHigh (750) для всех осей.
  • Работа в паре: Используется вместе с contentCompressionResistancePriority, который управляет поведением при НЕХВАТКЕ места.
  • Intrinsic Content Size: Оба свойства имеют смысл только для views, у которых есть внутренний размер (UILabel, UIButton, UIImageView).