Ответ
Приоритет сопротивления сжатию (Compression Resistance Priority) — это значение (от 0 до 1000), которое определяет, насколько сильно элемент интерфейса (view) сопротивляется попытке системы сжать его размер меньше его внутреннего (intrinsic) размера.
Контекст и проблема:
Когда контента больше, чем доступного пространства (например, длинный текст в UILabel внутри узкой ячейки), Auto Layout пытается сжать view. Приоритет сопротивления сжатию указывает, какое view будет сжато в первую очередь.
Как использовать:
- Высокий приоритет (например,
.defaultHigh- 750): View будет активно сопротивляться сжатию. Установите для элемента, чей контент важен (например, важная кнопка или заголовок). - Низкий приоритет (например,
.defaultLow- 250): View легче сжать. Установите для элементов, которые могут быть обрезаны (например, второстепенный текст).
Практический пример с двумя лейблами в горизонтальном стеке:
let titleLabel = UILabel()
titleLabel.text = "Важный заголовок"
titleLabel.setContentCompressionResistancePriority(.required, for: .horizontal) // Не сжимать!
let detailsLabel = UILabel()
detailsLabel.text = "Дополнительное описание, которое может быть длинным"
detailsLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) // Можно сжать
let stack = UIStackView(arrangedSubviews: [titleLabel, detailsLabel])
stack.axis = .horizontal
stack.distribution = .fill
// При нехватке места detailsLabel будет обрезан (...), а titleLabel останется целым.
Связь с Content Hugging Priority:
- Compression Resistance («не сжимай меня») — защищает от уменьшения меньше внутреннего размера.
- Content Hugging Priority («не растягивай меня») — защищает от увеличения больше внутреннего размера.
Значение по умолчанию: .defaultHigh (750) для сопротивления сжатию, что обычно защищает контент от обрезки.