Поиск…


Вступление

Класс UILabel реализует текстовое представление только для чтения. Вы можете использовать этот класс для рисования одной или нескольких строк статического текста, например тех, которые вы можете использовать для идентификации других частей вашего пользовательского интерфейса. Базовый класс UILabel обеспечивает поддержку как простого, так и сложного стиля текста ярлыка. Вы также можете контролировать аспекты внешнего вида, например, использует ли метка тень или рисует с подсветкой. При необходимости вы можете настроить внешний вид своего текста, добавив подклассом.

Синтаксис

  • UILabel.numberOfLines: Int // получить или установить максимальное количество строк, которые может иметь метка. 0 неограниченно
  • UILabel.text: String? // получить или установить текст, отображаемый ярлыком
  • UILabel.textColor: UIColor! // получить или установить цвет текста на ярлыке
  • UILabel.tintColor: UIColor! // получить или установить цвет оттенка метки
  • UILabel.attributedText: NSAttributedString? // получить или установить атрибутный текст метки
  • UILabel.font: UIFont! // получить или установить шрифт текста на ярлыке
  • UILabel.textAlignment: NSTextAlignment // получить или установить выравнивание текста

замечания

UILabels - это виды, которые могут использоваться для отображения одной или нескольких строк текста. Он содержит несколько способов стилизации текста, например, тени, цвета текста и шрифты.

UILabels также могут отображать Attributed Strings, который представляет собой текстовую + встроенную разметку для применения стилей к частям текста.

UILabel не соответствует протоколу UIAppearance, поэтому вы не можете использовать методы прокси-сервера UIAppearance для настройки внешнего вида UILabels. См. Обсуждение для большего.

Ссылка Apple Developer здесь

Изменение текста в существующей этикетке

Изменение текста существующей UILabel может быть выполнено путем доступа и изменения text свойства UILabel . Это можно сделать напрямую, используя String литералы или косвенно используя переменные.

Установка текста со String литералами

стриж

label.text = "the new text"

Objective-C

// Dot Notation
label.text = @"the new text";

// Message Pattern
[label setText:@"the new text"];

Установка текста с переменной

стриж

let stringVar = "basic String var"
label.text = stringVar

Objective-C

NSString * stringVar = @"basic String var";

// Dot Notation
label.text = stringVar;

// Message Pattern
[label setText: stringVar];

Цвет текста

Вы можете использовать свойство textColor метки, чтобы применить цвет текста ко всему тексту метки.

стриж

label.textColor = UIColor.redColor()
label.textColor = UIColor(red: 64.0/255.0, green: 88.0/255.0, blue: 41.0/225.0, alpha: 1)

Swift 3

label.textColor = UIColor.red
label.textColor = UIColor(red: 64.0/255.0, green: 88.0/255.0, blue: 41.0/225.0, alpha: 1)

Objective-C

label.textColor = [UIColor redColor];
label.textColor = [UIColor colorWithRed:64.0f/255.0f green:88.0f/255.0f blue:41.0f/255.0f alpha:1.0f];

Применение цвета текста к части текста

Вы также можете изменять цвет текста (или другие атрибуты) частей текста с помощью NSAttributedString :

Objective-C

attributedString = [[NSMutableAttributedString alloc] initWithString:@"The grass is green; the sky is blue."];
[attributedString addAttribute: NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(13, 5)];
[attributedString addAttribute: NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(31, 4)];
label.attributedText = attributesString;

стриж

let attributedString = NSMutableAttributedString(string: "The grass is green; the sky is blue.")
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.green(), range: NSRange(location: 13, length: 5))
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue(), range: NSRange(location: 31, length: 4))
label.attributedText = attributedString

Выравнивание текста

стриж

label.textAlignment = NSTextAlignment.left 
//or the shorter
label.textAlignment = .left 

Любое значение в перечислении NSTextAlignment действительно: .left , .center , .right , .justified .natural

Objective-C

label.textAlignment = NSTextAlignmentLeft;

Любое значение в перечислении NSTextAlignment действительно: NSTextAlignmentLeft , NSTextAlignmentCenter , NSTextAlignmentRight , NSTextAlignmentJustified , NSTextAlignmentNatural

Вертикальное выравнивание в UILabel не поддерживается из коробки: вертикально выравнивать текст вверху в UILabel

Создание UILabel

С рамкой

Когда вы знаете точные размеры, которые вы хотите установить для своей метки, вы можете инициализировать UILabel с помощью рамки CGRect .

стриж

let frame = CGRect(x: 0, y: 0, width: 200, height: 21)
let label = UILabel(frame: frame)
view.addSubview(label)

Objective-C

CGRect frame = CGRectMake(0, 0, 200, 21);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
[view addSubview:label];

С автоматической компоновкой

Вы можете добавить ограничения на UILabel если хотите, чтобы iOS динамически вычислял свой фрейм во время выполнения.

стриж

let label = UILabel()
label.backgroundColor = .red
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)

NSLayoutConstraint.activate([
    //stick the top of the label to the top of its superview:
    label.topAnchor.constraint(equalTo: view.topAnchor)

    //stick the left of the label to the left of its superview
    //if the alphabet is left-to-right, or to the right of its 
    //superview if the alphabet is right-to-left:
    label.leadingAnchor.constraint(equalTo: view.leadingAnchor)

    //stick the label's bottom to the bottom of its superview:
    label.bottomAnchor.constraint(equalTo: view.bottomAnchor)

    //the label's width should be equal to 100 points:
    label.widthAnchor.constraint(equalToConstant: 100)
])

Objective-C

UILabel *label = [[UILabel alloc] init];

С Objective-c + Visual Format Language (VFL)

  UILabel *label = [UILabel new];
  label.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview label];
  // add horizontal constraints with 5 left and right padding from the leading and trailing

  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelName]-5-|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:@{@"labelName":label}]];
  // vertical constraints that will use the height of the superView with no padding on top and bottom
  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[labelName]|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:@{@"labelName":label}]]

Документацию VFL можно найти здесь

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

С интерфейсом Builder

Вы также используете Interface Builder, чтобы добавить UILabel в свой файл Storyboard или .xib , перетащив Label с панели библиотеки объектов и отбросив его в виде на холсте:

Снимок экрана из интерфейса Builder

Вместо того, чтобы программно определять кадр (положение и размер) для UILabel , Storyboard или .xib позволяет использовать Auto Layout для добавления ограничений в элемент управления.

Чтобы получить доступ к этому ярлыку, созданному из storyboard или xib создайте IBOutlet этого ярлыка.

Связывание между построителем интерфейса и контроллером View

После того, как вы добавили UILabel в свою Storyboard или файл .xib вы можете связать ее с вашим кодом, нажав Control ⌃ а затем перетащив мышь между UILabel на ваш ViewController или вы можете перетащить ее в код, щелкнув правой кнопкой мыши имеют такой же эффект.

введите описание изображения здесь

В диалоговом окне свойств вы можете установить имя UILabel и установить его как strong или weak . Для получения дополнительной информации о strong и weak , см. Это ,

Другой способ - сделать выход программным путем следующим образом:

стриж

@IBOutlet weak var nameLabel : UILabel!

Objective-C

@property (nonatomic, weak) IBOutlet UILabel *nameLabel;

Установить шрифт

стриж

let label = UILabel()

Objective-C

UILabel *label = [[UILabel alloc] init];
or
UILabel *label = [UILabel new]; // convenience method for calling alloc-init

Изменение размера шрифта по умолчанию

стриж

label.font = UIFont.systemFontOfSize(17)

Swift 3

label.font = UIFont.systemFont(ofSize: 17)

Objective-C

label.font = [UIFont systemFontOfSize:17];

Используйте определенный вес шрифта

iOS 8.2

стриж

label.font = UIFont.systemFontOfSize(17, weight: UIFontWeightBold)

Swift3

label.font = UIFont.systemFont(ofSize: 17, weight: UIFontWeightBold)

Objective-C

label.font = [UIFont systemFontOfSize:17 weight:UIFontWeightBold];
iOS 8.2

стриж

label.font = UIFont.boldSystemFontOfSize(17)

Swift3

label.font = UIFont.boldSystemFont(ofSize: 17)

Objective-C

label.font = [UIFont boldSystemFontOfSize:17];

Используйте текстовый стиль динамического типа.

Размер шрифта и точки будет основываться на предпочтительном размере чтения пользователя.

стриж

label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

Swift 3

label.font = UIFont.preferredFont(forTextStyle: .body)

Objective-C

label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

Использовать другой шрифт

стриж

label.font = UIFont(name: "Avenir", size: 15)

Objective-C

label.font = [UIFont fontWithName:@"Avenir" size:15];

Изменить размер шрифта

Способ установки размера шрифта, не зная семейства шрифтов, заключается в использовании свойства шрифта UILabel .

стриж

label.font = label.font.fontWithSize(15)

Swift 3

label.font = label.font.withSize(15)

Objective-C

label.font = [label.font fontWithSize:15];

Использовать пользовательский шрифт Swift

См. Эту ссылку

Количество строк

Когда вы создаете ярлык и устанавливаете его текст более чем одной строки, которую он может отобразить, он будет усечен, и вы увидите только одну строку текста, заканчивающуюся тремя точками (...). Это связано с тем, что свойство с именем numberOfLines установлено в 1, и поэтому отображается только одна строка. Это распространенная ошибка при обработке UILabel s, и многие люди думают об этом как об ошибке, или могут использовать несколько ярлыков, чтобы показать больше, чем текст, но просто отредактировав это свойство, мы можем сказать, что UILabel принять до указанного количества строк. Например, если для этого свойства установлено значение 5, метка может отображать 1, 2, 3, 4 или 5 строк данных.

Установка значения программно

Чтобы установить это свойство, просто присвойте ему новое целое число:

стриж

label.numberOfLines = 2

Objective-C

label.numberOfLines = 2;

Заметка

Это свойство можно установить равным 0. Однако это не означает, что он не примет никаких строк, а означает, что метка может иметь столько строк, сколько необходимо (ака «Бесконечность»):

стриж

label.numberOfLines = 0

Objective-C

label.numberOfLines = 0;

Заметка

Если метка имеет ограничение по высоте, ограничение будет соблюдаться. В этом случае label.numberOfLines = 0 может работать не так, как ожидалось.

Заметка

Для более сложного многострочного текста UITextView может быть лучше подходит. *

Установка значения в построителе интерфейса

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

Как показано ниже:

введите описание изображения здесь

Размер по размеру

Предположим, у вас есть UILabel на вашем storyboard и вы создали IBOutlet для него в ViewController.swift / ViewController.m и назвали его labelOne .

Чтобы изменения были легко видны, измените backgroundColor и textColor меткиOne в методе viewDidLoad :

Функция sizeToFit используется, когда вы хотите автоматически изменять размер метки на основе содержимого, хранящегося в нем.

стриж

labelOne.backgroundColor = UIColor.blueColor()
labelOne.textColor = UIColor.whiteColor()
labelOne.text = "Hello, World!"
labelOne.sizeToFit()

Swift 3

labelOne.backgroundColor = UIColor.blue
labelOne.textColor = UIColor.white
labelOne.text = "Hello, World!"
labelOne.sizeToFit()

Objective-C

labelOne.backgroundColor = [UIColor blueColor];
labelOne.textColor = [UIColor whiteColor];
labelOne.text = @"Hello, World!";
[labelOne sizeToFit];

Вывод для вышеуказанного кода:

введите описание изображения здесь

Как вы можете видеть, никаких изменений нет, поскольку текст отлично подходит для labelOne. sizeToFit только изменяет рамку метки.

Давайте изменим текст на несколько более длинный:

labelOne.text = "Hello, World! I’m glad to be alive!"

Теперь labelOne выглядит так:

введите описание изображения здесь

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

введите описание изображения здесь

На этот раз, когда мы запустим приложение, labelOne появится правильно:

введите описание изображения здесь

Свойство numberOfLines также может быть изменено в файле ViewController :

// Objective-C
labelOne.numberOfLines = 0; 

// Swift
labelOne.numberOfLines = 0

Фоновый цвет

стриж

label.backgroundColor = UIColor.redColor()

label.backgroundColor = .redColor()

Swift 3

label.backgroundColor = UIColor.red

Objective-C

label.backgroundColor = [UIColor redColor];

Добавить тени в текст

стриж

label1.layer.shadowOffset = CGSize(width: 3, height: 3)
label1.layer.shadowOpacity = 0.7
label1.layer.shadowRadius = 2

Swift 3

label1.layer.shadowOffset = CGSize(width: 3, height: 3)
label1.layer.shadowOpacity = 0.7
label1.layer.shadowRadius = 2

Objective-C

label1.layer.shadowOffset = CGSizeMake(3, 3);
label1.layer.shadowOpacity = 0.7;
label1.layer.shadowRadius = 2;

введите описание изображения здесь

Переменная высота с использованием ограничений

Вы можете создать UILabel с динамической высотой, используя автоматическую компоновку.

Вам нужно установить numberOfLines в ноль (0) и добавить минимальную высоту, установив ограничения с отношением типа .GreaterThanOrEqual в .Height

iOS 6

стриж

label.numberOfLines = 0

let heightConstraint = NSLayoutConstraint(
    item: label,
    attribute: .Height,
    relatedBy: .GreaterThanOrEqual,
    toItem: nil,
    attribute: .NotAnAttribute,
    multiplier: 0,
    constant: 20
)

label.addConstraint(heightConstraint)
iOS 9

стриж

label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraintGreaterThanOrEqualToConstant(20).active = true

LineBreakMode

Использование кода

UILabel.lineBreakMode: NSLineBreakMode

стриж

label.lineBreakMode = .ByTruncatingTail
  • .ByWordWrapping
  • .ByCharWrapping
  • .ByClipping
  • .ByTruncatingHead
  • .ByTruncatingTail
  • .ByTruncatingMiddle

Swift 3

label.lineBreakMode = .byTruncatingTail
  • .byWordWrapping
  • .byCharWrapping
  • .byClipping
  • .byTruncatingHead
  • .byTruncatingTail
  • .byTruncatingMiddle

Objective-C

[label setLineBreakMode:NSLineBreakByTruncatingTail];
  • NSLineBreakByWordWrapping
  • NSLineBreakByCharWrapping
  • NSLineBreakByClipping
  • NSLineBreakByTruncatingHead
  • NSLineBreakByTruncatingTail
  • NSLineBreakByTruncatingMiddle

Использование раскадровки

Это также можно установить в инспекторе атрибутов UILabel:

введите описание изображения здесь введите описание изображения здесь

Константы

  • Word Wrapping - обертывание происходит на границах слов, если только само слово не подходит для одной строки
  • Char Wrapping - обертывание происходит до первого символа, который не подходит
  • Линии отсечения просто не вытягиваются за край текстового контейнера
  • Усекающая головка - линия отображается так, что конец подходит в контейнере, а недостающий текст в начале строки обозначается эллипсовым символом
  • Усечение хвоста - строка отображается так, что начало вставляется в контейнер, а отсутствующий текст в конце строки обозначается эллипсовым символом
  • Усечение среднего - линия отображается так, что начало и конец вписываются в контейнер, а отсутствующий текст в середине обозначается эллипсовым символом

Вычислить границы содержимого (например, динамические высоты ячеек)

Обычный пример использования для вычисления фрейма, на который будет выполняться метка, - это правильно подобрать ячейки представления таблицы. Рекомендуемый способ использования этого метода - использовать метод NSString boundingRectWithSize:options:attributes:context:

options принимают параметры рисования строк:

  • NSStringDrawingUsesLineFragmentOrigin следует использовать для меток с несколькими строками
  • NSStringDrawingTruncatesLastVisibleLine следует добавить с помощью | оператора, если имеется максимальное количество строк

attributes является NSDictionary атрибутов, которые влияют на атрибуты строк (полный список: Apple Docs ), но факторы, влияющие на высоту, включают:

  • NSFontAttributeName : очень важно, размер и семейство шрифтов являются важной частью отображаемого размера метки.

  • NSParagraphStyleAttributeName : для настройки отображения текста. Это включает межстрочный интервал, выравнивание текста, стиль усечения и несколько других опций. Если вы явно не изменили ни одно из этих значений, вам не нужно слишком беспокоиться об этом, но может быть важно, если вы переключили некоторые значения на IB.

context должен быть равен nil поскольку основной случай использования NSStringDrawingContext заключается в том, чтобы разрешить размер шрифта, чтобы он соответствовал указанному прямоугольнику, что не должно быть, если мы вычисляем динамическую высоту.

Цель C

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *labelContent = cell.theLabel.text;
    // you may choose to get the content directly from the data source if you have done minimal customizations to the font or are comfortable with hardcoding a few values
//    NSString *labelContent = [self.dataSource objectAtIndexPath:indexPath];
    
    // value may be hardcoded if retrieved from data source
    NSFont *labelFont = [cell.theLabel font];
    
    // The NSParagraphStyle, even if you did not code any changes these values may have been altered in IB
    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    paragraphStyle.alignment = NSTextAlignmentCenter;

    NSDictionary *attributes = @{NSFontAttributeName: labelFont,
                                 NSParagraphStyleAttributeName: paragraphStyle};

    // The width is also important to the height
    CGFloat labelWidth = CGRectGetWidth(cell.theLabel.frame);
    // If you have been hardcoding up to this point you will be able to get this value by subtracting the padding on left and right from tableView.bounds.size.width
//    CGFloat labelWidth = CGRectGetWidth(tableView.frame) - 20.0f - 20.0f;

    CGRect bodyBounds = [labelContent boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];

    return CGRectGetHeight(bodyBounds) + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel;
}

Swfit 3

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    var cell = tableView.cellForRow(atIndexPath: indexPath)!
    var labelContent = cell.theLabel.text
    var labelFont = cell.theLabel.font
    var paragraphStyle = NSMutableParagraphStyle()

    paragraphStyle.lineBreakMode = .byWordWrapping
    paragraphStyle.alignment = .center

    var attributes = [NSFontAttributeName: labelFont, NSParagraphStyleAttributeName: paragraphStyle]

    var labelWidth: CGFloat = cell.theLabel.frame.width

    var bodyBounds = labelContent.boundingRect(withSize: CGSize(width: width, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: attributes, context: nil)

    return bodyBounds.height + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel
}

И наоборот, если у вас есть установленное максимальное количество строк, вам сначала нужно вычислить высоту одной строки, чтобы убедиться, что мы не получаем значение выше допустимого размера:

    // We calculate the height of a line by omitting the NSStringDrawingUsesLineFragmentOrigin option, which will assume an infinitely wide label
    CGRect singleLineRect = [labelContent boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)
                                                 options:NSStringDrawingTruncatesLastVisibleLine
                                                 context:nil];
    CGFloat lineHeight = CGRectGetHeight(singleLineRect);
    CGFloat maxHeight = lineHeight * cell.theLabel.numberOfLines;

    // Now you can call the method appropriately
    CGRect bodyBounds = [labelContent boundingRectWithSize:CGSizeMake(width, maxHeight) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine) attributes:attributes context:nil];

    return CGRectGetHeight(bodyBounds) + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel;

Настраиваемая метка

ПРИМЕЧАНИЕ. В большинстве случаев лучше использовать UIButton вместо создания UILabel вы можете нажать. Используйте этот пример, если вы уверены, что по какой-то причине вы не хотите использовать UIButton .

  1. Создать ярлык
  2. Включить взаимодействие с пользователем
  3. Добавить UITapGestureRecognizer

Ключом к созданию интерактивной UILabel является возможность взаимодействия с пользователем.

стриж

let label = UILabel()
label.userInteractionEnabled = true

let gesture = UITapGestureRecognizer(target: self, action: #selector(labelClicked(_:)))
label.addGestureRecognizer(gesture)

Objective-C

UILabel *label = [[UILabel alloc] init];
[label setUserInteractionEnabled:YES];

UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[label addGestureRecognizer:gesture];

Установка «userInteractionEnabled» в инспекторе атрибутов раскадровки

Вместо использования кода вы можете выбрать UILabel внутри раскадровки и проверить опцию:

введите описание изображения здесь

Динамическая рамка ярлыка с неизвестной длиной текста

Иногда нам приходится изменять размер UILabel на основе динамического содержимого, где длина текста неизвестна. В этом примере ширина UILabel фиксируется в 280 точках, а высота бесконечна, скажем, 9999. Оцените кадр относительно стиля текста и maximumLabelSize.

Objective-C

UILabel * label = [[UILabel alloc] init];

NSString *message = @"Some dynamic text for label";

//set the text and style if any.
label.text = message;

label.numberOfLines = 0;

CGSize maximumLabelSize = CGSizeMake(280, 9999); //280:max width of label and 9999-max height of label.

// use font information from the UILabel to calculate the size
CGSize expectedLabelSize = [label sizeThatFits:maximumLabelSize];

//Deprecated in iOS 7.0
//CGSize expectedLabelSize = [message sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

// create a frame that is filled with the UILabel frame data
CGRect newFrame = label.frame;

// resizing the frame to calculated size
newFrame.size.height = expectedLabelSize.height;

// put calculated frame into UILabel frame
label.frame = newFrame;

стриж

var message: String = "Some dynamic text for label"
//set the text and style if any.
label.text = message
label.numberOfLines = 0
var maximumLabelSize: CGSize = CGSize(width: 280, height: 9999)
var expectedLabelSize: CGSize = label.sizeThatFits(maximumLabelSize)
// create a frame that is filled with the UILabel frame data
var newFrame: CGRect = label.frame
// resizing the frame to calculated size
newFrame.size.height = expectedLabelSize.height
// put calculated frame into UILabel frame
label.frame = newFrame

Текст, обозначенный ярлыком

01. Подчеркнутый текст: - Single / Double Line, Strike Through: - Single / Double Line

Шаг 1

Выберите ярлык и измените тип метки Plain на Attributed введите описание изображения здесь введите описание изображения здесь

Шаг 2

Нажмите на текст ярлыка и щелкните правой кнопкой мыши

введите описание изображения здесь

Шаг 3

Затем нажмите «Шрифт» -> «Показать шрифты».

введите описание изображения здесь

Шаг 4

Затем появится вид на шрифт и нажмите кнопку подчеркивания, чтобы подчеркнуть текст или нажмите кнопку прокрутки, чтобы сделать текст зачеркнутым. И выберите одну строку или двойную линию.

введите описание изображения здесь

Наконец, нажмите «Ввод», и ярлык будет отображаться как подчеркивание или зачеркивание в соответствии с вашим выбором.

введите описание изображения здесь

02. Добавить текст shaddow / background blur effects

Получите представление «Шрифт», как описано выше, и нажмите кнопку «Эффекты».

введите описание изображения здесь

Если вы не видите предварительный просмотр, щелкните изображение показа в настройках

введите описание изображения здесь

Наконец, измените shaddow и смещение в соответствии с вашими предпочтениями.

введите описание изображения здесь

Обосновать текст

стриж

let sampleText = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

// Create label
let label = UILabel(frame: CGRectMake(0, 0, view.frame.size.width, 400))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping

// Justify text through paragraph style
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.Justified
let attributes = [NSParagraphStyleAttributeName: paragraphStyle, NSBaselineOffsetAttributeName: NSNumber(float: 0)]
let attributedString = NSAttributedString(string: sampleText, attributes: attributes)
label.attributedText = attributedString
view.addSubview(label)

Objective-C

  NSString *sampleText = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    
    // Create label
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 400)];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByWordWrapping;
    
    
    // Justify text through paragraph style
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.alignment = NSTextAlignmentJustified;
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:sampleText attributes:@{
                    NSParagraphStyleAttributeName : paragraphStyle,
                    NSBaselineOffsetAttributeName : [NSNumber numberWithFloat:0]
                    }];
    label.attributedText = attributedString;
    [self.view addSubview:label];

Автоматическая метка в соответствии с текстом

В этом примере показано, как ширина метки может автоматически изменяться при изменении текстового содержимого.

анимированный gif метки автоматического изменения размера

Прикрепите левый и верхний края

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

Снимок экрана: настройка ограничений автоматической компоновки

После этого он автоматически изменит размер.

Заметки

  • Этот пример исходит из этого ответа переполнения стека .

  • Не добавляйте ограничения для ширины и высоты. Ярлыки имеют внутренний размер, основанный на их текстовом содержимом.

  • Не нужно устанавливать sizeToFit при использовании автоматического макета. Полный код для примера проекта приведен здесь:

      import UIKit
      class ViewController: UIViewController {
      
          @IBOutlet weak var myLabel: UILabel!
      
          @IBAction func changeTextButtonTapped(sender: UIButton) {
              myLabel.text = "my name is really long i want it to fit in this box"
          }
      }
    
  • Этот метод также может использоваться для правильного размещения нескольких меток по горизонтали, как в этом примере .

анимированный gif, показывающий автоматическое изменение размера метки

  • Если вы хотите, чтобы ваш ярлык myLabel.preferredMaxLayoutWidth = 150 // or whatever к строке, установите количество строк в 0 в IB и добавьте myLabel.preferredMaxLayoutWidth = 150 // or whatever в коде. (Кнопка также прикреплена к нижней части этикетки, чтобы она сдвигалась вниз, когда высота этикетки увеличивалась.)

скриншот: многострочное изменение размера

Получите размер UILabel строго на основе его текста и шрифта

NSString предоставляет метод boundingRectWithSize который можно использовать для прогнозирования полученного CGSize UILabel на основе его текста и шрифта без необходимости создания UILabel

Objective-C

[[text boundingRectWithSize:maxSize options:(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName: fontName} context:nil] size];

стриж

let nsText = text as NSString?
nsText?.boundingRectWithSize(maxSize, options: [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin], attributes: [NSFontAttributeName: fontName], context: nil).size

стриж

Создать ярлык и метку «Ограничение ограничения высоты». Добавьте ниже код, в котором вы будете прикреплять текст к метке.

@IBOutlet var lblDescriptionHeightConstration: NSLayoutConstraint! 
@IBOutlet weak var lblDescription: UILabel!

let maxWidth = UIScreen.mainScreen().bounds.size.width - 40
let sizeOfLabel = self.lblDesc.sizeThatFits(CGSize(width: maxWidth, height: CGFloat.max))
self.lblDescriptionHeightConstration.constant = sizeOfLabel.height

Примечание: «40» - это пространство левой и правой сторон экрана.

Цвет выделенного и выделенного текста

Objective-C

UILabel *label = [[UILabel alloc] init];
label.highlighted = YES;
label.highlightedTextColor = [UIColor redColor];

стриж

let label = UILabel()
label.highlighted = true
label.highlightedTextColor = UIColor.redColor()

Swift 3

let label = UILabel()
label.isHighlighted = true
label.highlightedTextColor = UIColor.red


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow