Вот пример, который соответствует тому, что вы хотите:
Во-первых, UIStackView на самом деле усложнит задачу, потому что мы хотим точно настроить расстояние между каждой меткой. Я просто использовал начальные и конечные ограничения для размещения каждой метки в строке.
Хитрость заключается в том, чтобы установить правильные приоритет устойчивости к сжатию контента и приоритет содержания для каждой метки. Во-первых, мы хотим, чтобы 0 с всегда соответствовал размеру своего содержимого, поэтому мы устанавливаем его приоритет сопротивления сжатию содержимого на 1000. Приоритет сжатия содержимого может оставаться на значении по умолчанию, равном 250.
Я также разделил знак @ на отдельную метку, так как мы хотим, чтобы он всегда появлялся. Установите приоритет сопротивления сжатию содержимого на 1000 и оставьте приоритет сжатия содержимого на уровне 250.
Затем для этикетка_усадки мы устанавливаем приоритет устойчивости к сжатию контента на 749 и приоритет сжатия контента на 1000. То есть мы хотим, чтобы этикетка_усадки никогда не пытался увеличить размер своего текстового содержимого, и мы хотим, чтобы его содержимое быть сжатым, если нам нужно.
Наконец, для Лаабель мы устанавливаем приоритет захвата содержимого равным 1000, а приоритет сопротивления сжатию содержимого — 750. То есть метка будет занимать столько места, сколько может, и поскольку ее приоритет сопротивления сжатию на 1 выше, чем у этикетка_усадки, этикетка_усадки будет сжиматься перед Лаабель.
Вы можете прочитать о сжатии контента и захвате контента в документах Apple здесь:
Полный исходный код моего примера приложения доступен здесь:
https://github.com/elliotfiske/StackOverflowContentHuggingExample
Вы забыли об ограничении установки пространства между метками. Поскольку все метки имеют приоритет 1000, кажется, что это должно быть ограничение «БольшеТанОравно».
Спасибо. Как я заметил, изменение приоритета захвата контента не имеет значения. Работает даже без замены. Я не понимаю, что это за оба и в чем между ними разница (обнимание контента и сопротивление сжатию)
UIStackView
.