2012-07-05 2 views
3

У меня есть вид UIlabel, который позволяет показать две строки строк. Но в моем случае есть только одно длинное слово. Независимо от того, как я установил режим разрыва строки на UILineBreakModeTailTruncation или UILineBreakModeWordWrap, он всегда разбивает слово на две строки. Как это: «хххххх хх» Я хотел бы, чтобы укоротить его в первой строке, например: «хххх ...»UILabel с несколькими линиями для усечения одного длинного слова

Есть ли способ осуществить это. В большинстве случаев он должен показывать две строки слов.

Дополнительная редакция: Примите следующее изображение в качестве примера. То, что я ожидал, - две верхние метки: одно длинное слово может быть усечено в одну строку; несколько коротких слов могут отображаться в двух строках. Нижняя метка в настоящее время.

enter image description here

+0

Я сказал, что в некоторых других случаях он должен показывать две строки (несколько коротких слов могут быть показаны в двух строках). Просто некоторые редкие случаи, длинное слово будет обертывание символов в две строки, которые я хочу просто показать в одной строке с помощью «...». – yibuyiqu

+0

что вы хотите точно, я еще не понял вашу точку зрения? – Abhishek

+0

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

ответ

4

Для того, чтобы сделать то, что вы просите, вы должны выяснить, если есть только одно слово. Если есть, установите количество строк в 1, и автоматическое сжатие должно исправить ситуацию. Если этого не произошло, установите количество строк на 0.

например.

UILabel *label = [[UILabel alloc] init]; 
label.font = [UIFont systemFontOfSize:12.0]; 
label.adjustsFontSizeToFitWidth = YES; 
label.minimumScaleFactor = 0.8; 
label.text = NSLocalizedString(@"Information", @"E: 'Information'"); 
NSUInteger words = [label.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].count; 
label.numberOfLines = (words == 1) ? 1 : 0; 

Swift 3.0

let label = UILabel() 
label.font = UIFont.systemFont(ofSize: 12) 
label.adjustsFontSizeToFitWidth = true 
label.minimumScaleFactor = 0.8 
label.text = NSLocalizedString("Information", comment: "E: 'Information'") 
let words = label.text?.components(separatedBy: NSCharacterSet.whitespacesAndNewlines).count 
label.numberOfLines = words == 1 ? 1 : 0 
1

Dont сделать что-нибудь

установленное количество линии 1 нет режима перерыва

установить размер шрифта и мин размер шрифта же

видеть изображение enter image description here

enter image description here

+0

Спасибо, что ответили, но не подходят моему делу. См. Мой комментарий выше. – yibuyiqu

0

Установите количество строк по одному или не задайте количество строк по умолчанию: 1. И режим разрыва строки будет UILineBreakModeTailTruncation ... и специально проверит ширину вашей метки .... Это не должно быть больше использовать следующим образом ...

[lbl setFrame:CGRectMake:(10,10,50,30)]; 
    [lbl setLineBreakMode:UILineBreakModeTailTruncation]; 
    [lbl setNumberOfLines:1]; 

может это поможет ...

+0

Спасибо, что ответили, но не подходят моему делу. См. Мой комментарий выше. – yibuyiqu

0

делая ярлык более шире вы можете решить эту проблему.

[lbl setFrame:CGRectMake:(xPosition,yPosition,heightValue,21)]; 

[lbl setNumberOfLines:1];

где

xPosition & значение yPosition является значением, установленным для этикетки.

heightValue - соответствующее значение, которое правильно выравнивает вашу метку в представлении.

идти ...

+0

Спасибо, что ответили, но не подходят моему делу. См. Мой комментарий выше. – yibuyiqu

Смежные вопросы