Поиск…
Вступление
Класс 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
с панели библиотеки объектов и отбросив его в виде на холсте:
Вместо того, чтобы программно определять кадр (положение и размер) для 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];
Используйте определенный вес шрифта
стриж
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];
стриж
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
стриж
label.numberOfLines = 0
let heightConstraint = NSLayoutConstraint(
item: label,
attribute: .Height,
relatedBy: .GreaterThanOrEqual,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0,
constant: 20
)
label.addConstraint(heightConstraint)
стриж
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
.
- Создать ярлык
- Включить взаимодействие с пользователем
- Добавить
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];
Автоматическая метка в соответствии с текстом
В этом примере показано, как ширина метки может автоматически изменяться при изменении текстового содержимого.
Прикрепите левый и верхний края
Просто используйте автомасштабирование, чтобы добавить ограничения, чтобы прикрепить левую и верхнюю стороны метки.
После этого он автоматически изменит размер.
Заметки
Этот пример исходит из этого ответа переполнения стека .
Не добавляйте ограничения для ширины и высоты. Ярлыки имеют внутренний размер, основанный на их текстовом содержимом.
Не нужно устанавливать
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" } }
- Этот метод также может использоваться для правильного размещения нескольких меток по горизонтали, как в этом примере .
- Если вы хотите, чтобы ваш ярлык
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