Полное руководство: как вписать метку в текст в Swift

При разработке iOS текст на экране обычно отображается с помощью меток (UILabel). Однако иногда текст может быть длиннее, чем доступное пространство, что приводит к усечению или обрезанию текста. Чтобы текст помещался в метку и не был обрезан, необходимо реализовать методы подгонки текста. В этой статье мы рассмотрим несколько методов размещения метки в тексте в Swift, а также приведем примеры кода.

Метод 1. Настройка размера шрифта
Один из способов подогнать метку к тексту — динамическая настройка размера шрифта. Вот пример того, как этого можно добиться:

label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5

В этом фрагменте кода для adjustsFontSizeToFitWidthустановлено значение true, что позволяет метке автоматически уменьшать размер шрифта в соответствии с доступной шириной. Свойство minimumScaleFactorопределяет минимальный коэффициент масштабирования шрифта, который следует применять.

Метод 2: использование ограничений автоматического макета.
Автоматический макет предоставляет мощный механизм размещения текста внутри метки. Вот пример использования ограничений автоматического макета:

label.numberOfLines = 0 // Allow multiple lines
label.lineBreakMode = .byWordWrapping
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    label.topAnchor.constraint(equalTo: superview.topAnchor),
    label.leadingAnchor.constraint(equalTo: superview.leadingAnchor),
    label.trailingAnchor.constraint(equalTo: superview.trailingAnchor),
    label.bottomAnchor.constraint(equalTo: superview.bottomAnchor)
])

В этом коде мы устанавливаем для numberOfLinesзначение 0, чтобы разрешить использование нескольких строк, и для lineBreakMode.byWordWrappingдля переноса текста. Задав соответствующие ограничения, размер метки будет динамически регулироваться в соответствии с текстом.

Метод 3: использование внутреннего размера контента UILabel
Другой подход — использовать внутренний размер контента метки. Вот пример:

label.numberOfLines = 0 // Allow multiple lines
label.lineBreakMode = .byWordWrapping
label.setContentCompressionResistancePriority(.required, for: .vertical)
label.setContentHuggingPriority(.required, for: .vertical)

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

Метод 4: расчет размера текста вручную
Если вам нужен детальный контроль над макетом текста, вы можете рассчитать размер текста вручную, используя метод boundingRect. Вот пример:

let maxSize = CGSize(width: labelWidth, height: CGFloat.greatestFiniteMagnitude)
let textRect = text.boundingRect(with: maxSize, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: label.font], context: nil)
label.frame.size = textRect.size

В этом коде labelWidthпредставляет доступную ширину метки, а text— отображаемый текст. Вычислив ограничивающий прямоугольник текста, вы можете соответствующим образом установить размер метки.

Размещение метки в тексте имеет решающее значение для обеспечения оптимального взаимодействия с пользователем при разработке приложений для iOS. В этой статье мы рассмотрели различные методы подгонки текста в Swift, включая настройку размера шрифта, использование ограничений автоматического макета, использование встроенного размера контента и расчет размера текста вручную. Используя эти методы, вы можете создавать метки, которые динамически настраиваются для плавного отображения текста.