Ответ
contentCompressionResistancePriority определяет приоритет, с которым представление (view) сопротивляется сжатию своего размера ниже его intrinsicContentSize.
Зачем это нужно? В Auto Layout при нехватке пространства система должна решить, какое из представлений сжать. Свойство задает «силу сопротивления» сжатию по горизонтальной (.horizontal) или вертикальной (.vertical) оси.
Практический пример: Два лейбла (label1, label2) расположены в одной строке, и их суммарная ширина превышает ширину супервью.
// label1 важнее, его текст должен быть виден полностью.
label1.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
// label2 может быть обрезан или сжат.
label2.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
В этой ситуации система сожмет (обрежет) label2, так как его приоритет сопротивления сжатию ниже.
Ключевые моменты:
- Приоритеты: Задаются через
UILayoutPriorityв диапазоне от 1 до 1000. Стандартные значения:.required(1000),.defaultHigh(750),.defaultLow(250). - Значение по умолчанию:
.defaultHigh(750) для всех осей. - Антагонист:
contentHuggingPriority— приоритет сопротивления РАСТЯЖЕНИЮ сверхintrinsicContentSize.
Ответ 18+ 🔞
А, слушай, смотри, вот эта штука contentCompressionResistancePriority — это, по сути, её крик души, когда системе не хватает места и она начинает всех давить.
Представь: стоят два лейбла в ряд, как два мужика в тесном лифте. Система смотрит и думает: «Ну всё, пиздец, не влезаете. Кого прижать к стенке?». Вот этот самый приоритет — это как внутренний стержень, насколько лейбл готов упираться локтями и орать «Не уйду, блядь, я важный!».
Короче, это сила, с которой вьюха сопротивляется, чтобы её не сжали меньше её естественного размера (intrinsicContentSize).
Пример из жизни, чтобы не ебнуться: Допустим, у тебя цена и название товара в строке. Цена должна быть всегда видна полностью, а название — ну, обрежется, и хуй с ним.
// Цена — важная пизда, её не трогать.
priceLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
// Название — потерпит, пусть его сжимают.
nameLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
Когда места станет мало, система посмотрит на эти приоритеты, поймёт, что nameLabel — тряпка, и начнёт его укорачивать, пока цена стоит как скала. Ёпта, логично же?
Что надо запомнить, чтобы не быть мудаком:
- Циферки: Приоритеты от 1 до 1000. Есть готовые:
.required(1000 — «вообще не трогай, а то в ебло получишь»),.defaultHigh(750),.defaultLow(250). - По дефолту у всех стоит
.defaultHigh(750) — то есть все изначально немного упёртые. - Не путай с другой хуйнёй: Есть ещё
contentHuggingPriority— это наоборот, сопротивление растягиванию. Одна штука не даёт сжать, другая — не даёт раздуть. В общем, полный контроль над жопой вьюхи.
Вот и вся магия. Выставляешь приоритеты — и система сама решает, кого сломать в первую очередь, когда начинается давка. Удобно, блядь.