У меня есть UIStackView
с тремя надписями, высота которых определяется с использованием динамического типа и текста, который может сильно различаться по длине.Контейнер для представления стека имеет фиксированную ширину и высоту в зависимости от размера экрана устройства (например, небольшого размера на iPhone SE). Я хочу центрировать представление стека внутри контейнера (с некоторыми внешними полями.)
Проблема заключается в том, что в зависимости от размера шрифта и высоты контейнера некоторые метки в представлении стека будут обрезаны.Вот пример с третьей меткой:
![Third label in stack view is clipped](https://i.stack.imgur.com/lvUKg.png)
Я экспериментировал с приоритетами ограничения макета как для стека, так и для меток, но это не такКажется, это правильный подход.Вместо этого настройка видимости надписей работает лучше: поддерживается правильный интервал между элементами.
Тогда у меня вопрос, каково правильное время, чтобы определить, что высота надписи не отображается полностью и чтобы скрыть это.
Высота метки близка, но не совсем равна UIFont
lineHeight
, поэтому есть некоторое округление, которое делает это немного трудным.
Самая большая проблема заключается в том, что после прохода макета в UIStackView
layoutSubviews
высоты упорядоченных подпредставлений могут быть обнаружены, но вы не можете скрыть упорядоченные виды в этой точке, потому что это вызывает другой проход макета и рекурсию.
Так чего мне не хватает?: -)
Вот тестовый проект - постройте для iPhone Xs в симуляторе, и вы увидите те же результаты на скриншоте выше.
Решение
Суть Тома Ирвинга внизу указала мне в правильном направлении.Хитрость заключается в том, чтобы перечислить подпредставления после прохода макета и удалить их, если требования к высоте не выполнены.
Обновленный проект показывает, как это сделать в DebugStackView
layoutSubviews
.И да, UIStackView
достойный противник.