При разработке интерфейсов для мобильного клиента 1С мы часто сталкиваемся с задачей адаптации внешнего вида формы под разный объем контента. Одной из наиболее частых проблем является необходимость изменения высоты элемента Декорация (надпись) в зависимости от того, сколько строк текста в нем содержится. Давайте разберем, почему стандартные свойства не всегда работают так, как мы ожидаем, и какие существуют способы решения этой задачи.
На текущий момент в платформе 1С стандартная Декорация с видом Надпись не обладает встроенным механизмом автоматического изменения высоты («резиновой» верстки) на уровне свойств. Даже при включении параметров АвтоМаксимальнаяВысота или попытке принудительно задать Высота = 0, поведение элемента остается труднопредсказуемым. Платформа стремится зафиксировать сетку формы для оптимизации отрисовки, особенно на мобильных устройствах, что часто приводит либо к усечению текста, либо к появлению лишних пустых пространств.
Мы проанализировали ситуацию и выяснили, что попытки «подгонять» размер через проверку СтрДлина также малоэффективны. Дело в том, что ширина символов в шрифтах переменная (например, буква «Ш» значительно шире буквы «i»), поэтому строгая зависимость длины строки от количества символов не даст точного результата.
Если нам необходимо отобразить многострочный текст, который должен динамически подстраиваться под размер контейнера, самым эффективным и проверенным методом является использование Поле ввода. Этот элемент управления гораздо лучше справляется с задачами динамической высоты.
Для того чтобы Поле ввода работало как адаптивная надпись, выполним следующие настройки:
Вид в значение Поле ввода.РежимВыводаМногострочногоТекста в значение Истина.ТолькоПросмотр в значение Истина.РастягиватьПоВертикали в значение Истина.При таких параметрах платформа будет самостоятельно рассчитывать необходимую высоту поля в зависимости от ширины, доступной на экране мобильного устройства.
Если дизайн требует более сложного форматирования текста (например, использование различных шрифтов или выделение жирным внутри одного блока) и идеального соблюдения высоты, мы рекомендуем использовать Поле HTML-документа.
Данный элемент использует движок браузера, встроенный в мобильную платформу 1С, поэтому расчет геометрии блоков происходит автоматически и максимально корректно. Рассмотрим пример того, как мы можем программно передать данные в такой элемент:
// Пример формирования HTML для вывода в ПолеHTMLДокумента
ТекстHTML = "
|<html>
|<body style='font-family: sans-serif; font-size: 14px;'>
|<div>" + Форма[ИмяВопроса + "_Формулировка"] + "</div>
|</body>
|</html>";
Элементы.ИмяВашегоПоляHTML.УстановитьТекст(ТекстHTML);
Использование этого метода позволяет полностью делегировать расчет высоты платформе. Мы избавляемся от необходимости «угадывать» размер или ограничивать количество строк вручную.
Помимо выбора правильного элемента, важно помнить о настройках Группа формы. Если ваш элемент помещен в группу, проверьте настройки самой группы:
Группировка (Вертикальная или Горизонтальная), которая не ограничивает расширение дочерних элементов.РастягиватьПоВертикали для контейнеров, если вы хотите, чтобы элемент «поджимался» под размер текста, а не стремился заполнить всё свободное пространство в группе.Подводя итог, можно сказать, что хотя стандартная Декорация ограничена в возможностях автовысоты, использование Поля ввода в режиме ТолькоПросмотр или Поля HTML-документа позволяет достичь желаемого результата. Мы рекомендуем остановиться на Поле ввода для простых текстовых блоков и Поле HTML-документа для задач, требующих высокой гибкости отображения.