Как я могу сделать многострочную метку правильной высоты, когда ее шрифт подгоняется под доступную ширину? - PullRequest
1 голос
/ 26 июня 2019

Я разработал вид, содержащий две метки.Текст заголовка является переменным и должен хорошо выглядеть для коротких и длинных заголовков, поэтому он настроен на поддержку нескольких строк текста (numberOfLines - 0) до тех пор, пока не останется свободного места, после чего шрифт долженсжать (adjustsFontSizeToFitWidth это true).

image

To demonstrate my issue I am using constant title text and adjusting the height of the container instead.

  1. Things look as expected when the height of the container is sufficient for both labels.

image

  1. Как только высота не достаточна, вместо сокращения шрифта метки заголовка субтитр обрезается.

image

  1. Мы предотвращаем это через subtitleLabel.setContentCompressionResistancePriority(.required, for: .vertical).Вещи выглядят лучше.Метка субтитра восстанавливается до правильной высоты, а шрифт метки заголовка уменьшается.

image

  1. Давайте снова уменьшим высоту.Метка субтитров выглядит хорошо до сих пор.Метка заголовка снова корректирует свой шрифт, но имеется большое количество верхнего и нижнего отступов.Это имеет некоторый смысл - больше не хватает высоты для трех строк заголовка, поэтому размер шрифта уменьшается до тех пор, пока он не уместится в две.Но мы хотим, чтобы сам лейбл уменьшал свою высоту, чтобы обнять содержимое, а не обматывать заголовок в океане пространства.

image

Expected Layout

image

Things I have tried:

  • Let's try to encourage it to do that using titleLabel.setContentHuggingPriority(.required, for: .vertical). No change unfortunately.
  • Let's remove that line and try something else. We've прочитайте , что мы должны попытаться снизить приоритет сжатия содержимого на заголовке: titleLabel.setContentCompressionResistancePriority(.defaultLow, for: .vertical).Без изменений.
  • Еще одно предложение - установить минимальный масштабный коэффициент на метке заголовка.Давайте попробуем titleLabel.minimumScaleFactor = 0.5.Без изменений.
  • Возможно, нам следует установить ограничение ширины , даже если мы уже прикрепляемся к суперпредставлению?Без изменений.
  • В нескольких местах предлагается установить метку preferredMaxLayoutWidth в соответствии с шириной метки, но это также не поможет.

Есть ли другие предложения?Есть ли способ реализовать этот дизайн с помощью автопрокладки?

1 Ответ

1 голос
/ 26 июня 2019

Условия для метки с саморазмерным размером (которая автоматически регулирует свою высоту в соответствии с ее содержимым) и метки с саморазмерным текстом (размер шрифта изменяется в соответствии с высотой) противоположны.Первый предполагает фиксированный размер шрифта и гибкую высоту;последний предполагает гибкий размер шрифта и фиксированную высоту.

Похоже, вы спрашиваете, можете ли вы автоматически иметь оба сразу.Нет, ты не можешь.Если вам нужна этикетка с саморазмерным размером, размер шрифта которой уменьшается при превышении определенного объема текста, вам придется уменьшить размер шрифта.

...