#iphone #objective-c #xcode #uilabel
#iPhone #objective-c #xcode #uilabel
Вопрос:
Когда я динамически изменяю текст UILabel, я бы предпочел получить многоточие (точка, точка, точка), а затем автоматически изменять размер текста. Как это сделать?
Другими словами, если у меня есть UILabel со словом Cat
с размером шрифта 14, а затем я меняю слово на Hippopotamus
шрифт, он сжимается, чтобы вместить все слово. Я бы предпочел, чтобы слово автоматически усекалось, за которым следует многоточие.
Я предполагаю, что есть параметр, который можно изменить в моем объекте UILabel. Я бы предпочел не делать это программно.
Ответ №1:
Задайте следующие свойства:
Цель С
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByTruncatingTail;
Swift
label.adjustsFontSizeToFitWidth = false
label.lineBreakMode = .byTruncatingTail
Вы также можете установить эти свойства в Interface builder.
Комментарии:
1. UILineBreakModeTailTruncation помечено как устаревшее, документы рекомендуют использовать NSLineBreakByTruncatingTail . Что делает то же самое.
2. Я также считаю, что по умолчанию для UILabels должно быть установлено значение adjustsFontSizeToFitWidth равным NO
3. Что делать, если у вас есть две метки рядом и вы хотите, чтобы одну можно было обрезать многоточием, а другую нельзя ни регулировать размер шрифта, ни усекать (предположим, что для текста достаточно места). Их фреймы настраиваются с использованием ограничений. Существует ли ограничение, которое заставит размер быть по крайней мере таким же большим, как размер содержимого, который должен быть, чтобы предотвратить многоточие или усечение?
Ответ №2:
У меня возникла проблема с созданием многоточия после того, как я создал UILabel и мне нужно было использовать UILabel.attributedText
вместо UILabel.text
. В стиле абзаца есть режим разрыва строки, который перезаписывает UILabel.lineBreakMode
при использовании приписываемого текста. Вам нужно будет установить значение lineBreakMode
to .byTruncatingTail
в стиле абзаца приписываемой строки, если вы хотите добиться многоточия.
например
let text = "example long string that should be truncated"
let attributedText = NSMutableAttributedString(
string: text,
attributes: [.backgroundColor : UIColor.blue.cgColor]
)
let range = NSRange(location: 0, length: attributedText.length)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byTruncatingTail
attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: range)
uiLabel.attributedText = attributedText
Комментарии:
1. На какую текстовую строку вы ссылаетесь? Это должно быть «пример long strong»?
2. Извините, я вижу, как это сбивало с толку, просто исправил пример и подтвердил, что он работает на игровой площадке.
Ответ №3:
Быстрое решение:
label.lineBreakMode = .ByTruncatingTail
Swift 3:
label.lineBreakMode = .byTruncatingTail
Комментарии:
1. разве вы не можете просто сделать
label.lineBreakMode = .ByTruncatingTail
?2. Похоже на это — да 🙂