Это значительно сложнее, чем кажется на поверхности.
Столбец «Информация» должен оцениваться для минимальной / максимальной ширины и переноса слов, а столбец «Заголовок» должен оцениваться для переноса слов на основе переменной ширины столбцов «Информация» ... и метки "Info" должны соответствовать ширине на основе самого широкого переносимого (или нет) текста.
Это много для автоматической разметки.
Я не думаю это можно сделать только с ограничениями. Основная проблема заключается в том, что автоматическая компоновка вычисляет высоту высоты меток заголовков на основе потенциала , при котором метки Info будут максимально широкими.
Итак, мы можем закончить с этим:
![enter image description here](https://i.stack.imgur.com/qnI69.png)
и текст метки заголовка больше не выровнен по вертикали с верхней частью метки.
Лучшее, что я могу придумать, это переопределить viewDidLayoutSubviews()
, используя счетчик, который заставляет автоматическое расположение сначала вычислять информационные метки, а затем метки заголовков.
Что касается настроек ограничения ...
Для заголовков заголовков ничего особенного не нужно - просто установите количество строк в ноль, чтобы разрешить перенос слов.
Для меток «Двоеточие» не нужны ограничения, но им нужно, чтобы для горизонтального содержимого и сопротивления сжатию было установлено значение 1000
(обязательно), поскольку мы не хотим, чтобы они растягивались или сжимались.
Для надписей Info необходимо:
- Сопротивление сжатию горизонтального содержимого: 1000
- Горизонтальное содержание содержимого: 999
- Ширина:> = его ширина в стеке с множителем 0,2
- Ширина: <= его ширина стека с множителем 0,6 </li>
- Ширина: = его ширина в стеке с множителем 0,2 и приоритетом: 999
и, наконец, bottom 4 Для информационных меток необходимо ограничение ширины, равное top Info label.
Горизонтальные стеки, составляющие 5 "строк", должны быть установлены на:
- Выравнивание: Top
- Распределение: заполнить
- Интервал: 8 (горизонтальный интервал между "столбцами")
Вертикальный вид стека, содержащий 5 «строк», должен быть установлен на:
- Выравнивание: заполнить
- Распределение: заполнить
- Интервал: 10 (интервал по вертикали между «рядами»)
Я запустил проект на GitHub, который демонстрирует макет - он имеет 10 различных «вариантов» содержимого меток, чтобы показать, как работает определение размера: https://github.com/DonMag/MutlilineVarWidthLabelColumns