Ответ
Content Compression Resistance Priority (приоритет сопротивления сжатию) — это значение (UILayoutPriority), которое определяет, насколько элемент интерфейса (например, UILabel или UIButton) будет сопротивляться уменьшению своего внутреннего размера (intrinsicContentSize) ниже естественного, если в системе Auto Layout возникает нехватка пространства.
Принцип работы:
Когда два элемента конкурируют за ограниченное пространство, система сжимает тот элемент, у которого ниже приоритет сопротивления сжатию по соответствующей оси (.horizontal или .vertical).
Практический пример с двумя UILabel:
let longLabel = UILabel()
longLabel.text = "Очень длинный текст метки"
// Высокий приоритет = сопротивляется сжатию
longLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
let shortLabel = UILabel()
shortLabel.text = "Коротко"
// Низкий приоритет = сожмется первым
shortLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
// При нехватке горизонтального пространства:
// 1. Система попытается сжать shortLabel.
// 2. Если сжатия shortLabel недостаточно, система начнет сжимать longLabel,
// так как его приоритет тоже ниже обязательного (.required).
Значения приоритета по умолчанию:
.required: 1000 (системные констрейнты)..defaultHigh: 750 (стандартный высокий)..defaultLow: 250 (стандартный низкий).
Связь с другими приоритетами: Этот приоритет работает в паре с Content Hugging Priority (приоритет «объятия» контента), который определяет, насколько элемент сопротивляется увеличению своего размера сверх естественного. Вместе они управляют поведением элементов на основе их внутреннего содержания.
Ответ 18+ 🔞
А, слушай, вот эта ваша «Content Compression Resistance Priority» — это же просто пиздец как важно, а многие её, блядь, в упор не видят! Представь себе: два лейбла в одной строке, один с текстом «скидка 99% только сегодня», а второй — «купи слона». И места, сука, на экране — как говна за баней. Кто из них сожмётся в три погибели, а кто останется красавчиком? Вот тут-то эта приоритетность и решает, блядь!
По сути, это цифра, которая кричит системе: «Эй, ёпта, не трогай меня, я важный!». Чем она выше — тем больше элемент сопротивляется, когда его пытаются сжать ниже его естественного размера. Как будто ты надуваешь щёки и говоришь: «Нет, блядь, я не влезу в эти узкие джинсы, я лучше соседа сожму!».
Вот тебе живой пример, чтобы мозг не взорвался:
let labelДлинныйКакЖизнь = UILabel()
labelДлинныйКакЖизнь.text = "Акция: купите эту хуйню и получите вторую такую же бесплатно!"
// Ставим высокий приоритет — этот пацан не сожмётся без боя.
labelДлинныйКакЖизнь.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
let labelКороткий = UILabel()
labelКороткий.text = "Цена"
// А этому похуй, пусть сжимается первым.
labelКороткий.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
Что будет? Когда места станет мало, система посмотрит на эти цифры и скажет: «Окей, "Цена" — ты лох с низким приоритетом, давай-ка подожмись». И короткий лейбл схлопнется. А длинный будет стоять, как скала, пока его тоже не прижмут, если места ваще овердохуища мало.
Циферки стандартные, запомни, чтоб не выглядеть мудаком:
.required— 1000. Это святое, блядь. Такой элемент сожмётся только если констрейнты вступят в ебическую конфронтацию..defaultHigh— 750. Ну, в общем, высоковат..defaultLow— 250. Ну, понятное дело, низковат.
И главное, не путай эту штуку с её сестрой-близняшкой — Content Hugging Priority. Та отвечает за то, чтобы элемент не распухал, как жопа после праздников, а эта — чтобы его не сжали, как твоё достоинство в холодной воде. Работают они в тандеме, управляя этим цирком с контентом. Вот и вся магия, ёпта!