2013-05-06 3 views
11

Я просто хочу выделить только текст в UILabel, я попытался дать backgroundColor для ярлыка, но он выделяет пустые места, также выглядит не очень хорошо. Так есть ли способ выделить текст без изменения размера UILabel.Как выделить только текст в UILabel - IOS

Пожалуйста, проверьте изображение, здесь метки больше, чем текст (центр выровнен)

enter image description here

Thanx.

+0

Вы должны будете использовать 'NSAttributedString'. –

+0

@MikeWeller Можете ли вы дать более подробную информацию ... – Newbee

+0

Я думаю, что вы хотите, чтобы фон был четким. set label.backgroundColor = [UIColor clearColor]; Label.highlightedTextColor = [UIColor greenColor]; – Ashini

ответ

22

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

ИОС 6, а затем решение использовать приписываемые строки:

NSMutableAttributedString *s = 
    [[NSMutableAttributedString alloc] initWithString:yourString]; 

[s addAttribute:NSBackgroundColorAttributeName 
      value:[UIColor greenColor] 
      range:NSMakeRange(0, s.length)]; 

label.attributedText = s; 
+0

Я еще не знаю о NSMutableAttributedString, так или иначе, что он отлично работает. Благодарю. – Newbee

+3

Я пробовал вышеупомянутый процесс. Со мной все плохо.: | http://i.imgur.com/XhuVL9q.png?1 –

+0

Это не работает должным образом вопросом: он также добавляет цвет фона в пустые пространства, созданные путем переноса слов. Проверьте: [Выделите только текст в UILabel] (http://stackoverflow.com/questions/31293873/highlight-just-the-text-in-a-uilabel?rq=1) – Damasio

1

попробовать это

MTLabel

MTLabel *label4 = [MTLabel labelWithFrame:CGRectMake(20, 270, 250, 60) 
            andText:@"This label is highlighted, has a custom line height, and adjusts font size to fit inside the label."]; 
     [label4 setLineHeight:22]; 
     [label4 setFont:[UIFont fontWithName:@"Helvetica" size:30]]; 
     [label4 setAdjustSizeToFit:YES]; 
     [label4 setMinimumFontSize:15]; 
     [label4 setFontHighlightColor:[[UIColor orangeColor] colorWithAlphaComponent:0.5]]; 
     [self.view addSubview:label4]; 
-3

Вы можете иметь UIImageView, установить цвет фона на ваш выбор, то поместите UILabel на нем. Это наверняка решит вашу проблему. Вот Обход код:

UIImageView * imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 40)]; 
[imgView setBackgroundColor:[UIColor brownColor]]; 
[self.view addSubview:imgView]; 


UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)]; 
[label setBackgroundColor:[UIColor clearColor]]; 
[label setTextAlignment:UITextAlignmentCenter]; 
label.text = @"My Label"; 
[imgView addSubview:label]; 


[label release]; 
[imgView release]; 

Вы также можете достичь того же с помощью Interface Builder.

+0

Фоновое изображение тоже будет охватывать весь UIlabel ... – Newbee

+0

Пожалуйста, проверьте мой отредактированный ответ –

+0

Пожалуйста, укажите причину для голосования! Поэтому я могу исправить свой ответ. –

3

Это добавит подвид за текстом, с правильным размером:

CGSize size= [[label text] sizeWithFont:[UIFont systemFontOfSize:18.0]]; 
NSLog(@"%.1f | %.1f", size.width, size.height); 
NSLog(@"%.1f | %.1f", label.frame.size.width, label.frame.size.height); 

UIView *highlightView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]; 
[highlightView setBackgroundColor:[UIColor greenColor]]; 
[self.view insertSubview:highlightView belowSubview:label]; 
[highlightView setCenter:label.center]; 

И не забывайте: [label setBackgroundColor:[UIColor clearColor]];

+3

Это не сработает, если текст обернут несколькими строками. Этот зеленый вид может образовывать только отдельные прямоугольники. Если вторая строка содержит только 1 слово, вся строка будет выделена. –

+0

Правильно, но если вам нужно поддерживать iOS <6 и не использовать 'NSMutableAttributedString', то это может быть самым простым решением. – xapslock