Поскольку то, что вы моделируете, является сложным, особенно с переносами строк, то ваше первоначальное предложение попробовать все размеры соответствует правильным линиям, особенно если оно должно быть точным.
Однако вместо того, чтобы проверять каждое значение, вы можете использовать бинарный поиск, чтобы найти подходящий размер шрифта. Вы знаете, что размер где-то между 1 и 100 (ваш верхний диапазон). используя бинарный поиск, каждый тест устанавливает размер шрифта и проверяет получившийся макет. Если текст слишком большой, мы ищем нижнюю половину текущего диапазона возможных значений. Если размер шрифта подходит, то мы ищем верхнюю половину. Ваш поиск будет использовать не более 7 попыток (100 журналов, основание 2, округлено в большую сторону), он будет точным, найдя самый большой размер без перехода, и будет гибким, если вам потребуется добавить больше требований позже, например, набор шрифтов. или более строгие ограничения на макет.
Я предполагаю, что вы используете текстовый компонент, который выполняет перенос строк, и что вы можете установить максимальную ширину равной 400. Итак, вы устанавливаете размер шрифта, и это делает макет, возвращающий вам необходимую высоту, раскладывая текст в пределах заданной ширины.
Вы можете использовать подсказки, чтобы попытаться быстрее привести алгоритм к результату, например, сделать первое предположение близким к ожидаемому размеру, но рендеринг текста происходит быстро, что повышение производительности может не стоить усилий по реализации.
См. Википедию - Алгоритм двоичного поиска