2013-12-06 2 views
7

Мое требование состоит в том, что мне нужно отображать текст в ярлыке таким образом, что если длина текста слишком велика для размещения в одной строке, мне нужно усечь его в конце в таком так что только последние несколько символов (обычно число b/w 1-1000, так что длина текста может меняться.) видны, а текст перед ним усекается «...».Усечение части текста в UILabel

Таким образом, текст будет выглядеть как «abcdefgijk ... 10»

Есть ли способ, я могу добиться этого?

+0

Попробуйте этот label.lineBreakMode = NSLineBreakByTruncatingMiddle; –

+0

Я не могу использовать среднее усечение, потому что мне нужно отображать только последние несколько символов как «abcdefgijk ... 10». Но NSLineBreakByTruncatingMiddle даст что-то вроде «abcde ... lmn10» – user2990765

ответ

0

Есть много методов в NSString использование класса -длина, а затем использовать любого из этих

– substringFromIndex: 
– substringWithRange: 
– substringToIndex: 

создать временную строку, используя NSString stringwithFormat, положите нужные charecters вы получите от индекса substringTo и».... . "то ваши номера из строки подстрокойFromIndex.

надеюсь, что это помогает

1

Попробуйте это:

label.lineBreakMode = NSLineBreakByTruncatingMiddle; 

UILineBreakModeMiddleTruncation устарела с прошивкой 6.0.

+0

Спасибо @balram .. Я пропустил эту часть в спешке. –

+2

Не случайно, что Кришна - Балам вместе. Хорошо спасибо за ответ и исправление – Mrug

+0

@Mrug Dint get u –

0

Вы можете начать с поиска длины символов, которые могут быть помещены в строку, например «n». Вы можете воспользоваться этой ссылкой для определения «n» How to know if NSString fits in UILabel or not and index of the last string which fits?. Затем найдите длину строки. Если он превышает n, извлеките последние два символа. Ex

NSString * fooString = @"a very long string"; 
NSString * s2 = [fooString substringWithRange:NSMakeRange([fooString length]-3, 2)]; 
NSString * s1 = [fooString substringWithRange:NSMakeRange(0 , n-5)]; 
NSString * newString = [NSString stringWithFormat:@"%@...%@",s1,s2]; 
+0

Что вы подразумеваете под 'n' здесь? - это 'n = [fooString length]'? –

+0

нет, здесь n - максимальные символы, которые могут поступать в эту строку – mak

-1

У нас есть различные режимы обрыва линии для UILabel как

усечь Head, усечь Middle, Округление Tail

В XIb вы можете установить режим Line пролома то, что вы хотите

+0

Да, мы. Но они не дают нам полного контроля над точным «...» местом. –

0

Если вы используете файл XIB ..

выберите -> UILable и выберите -> Атрибут Инспектор тегов и изменения в Перерывы Line -> Обрезать хвост

просто способ усечения символов ...

-1

Вот как использовать его, NSLineBreakByTruncatingMiddle

UILabel *temp = [[UILabel alloc]initWithFrame:CGRectMake(5,75, 100, 50)]; 
[temp setBackgroundColor:[UIColor lightGrayColor]]; 
temp.lineBreakMode = NSLineBreakByTruncatingMiddle; 
temp.text = @"HelloBoss997"; 

Выход: Hello...s997

12
UILabel *contentLabel = [[UILabel alloc]initWithFrame:CGRectMake(50,100, 150, 30)]; 
contentLabel.text = @"abcdefghijklmnopqrstuvwxyz10"; 
contentLabel.lineBreakMode = NSLineBreakByTruncatingMiddle; 

Добавить ярлык на дисплей.Вы должны получить на выходе что-то вроде этого

abcdefghijklmnopq...10 
4

каждого, кто ищет более позднее решение, быстрое 3:

yourLabel.lineBreakMode = .byTruncatingMiddle; 
0

В раскадровке

  1. Выберите ярлык, который вы хотите для усечения символов.

  2. Выбрать инспектор атрибутов.

  3. Под атрибутами метки. Вы можете найти Line Перерыв

enter image description here

Done.

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