Как выделить только текст в UILabel — IOS

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

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

введите здесь описание изображения

Спасибо.


person Newbee    schedule 06.05.2013    source источник
comment
Вам придется использовать NSAttributedString.   -  person Mike Weller    schedule 06.05.2013
comment
@MikeWeller Можете ли вы дать более подробную информацию ...   -  person Newbee    schedule 06.05.2013
comment
Я думаю, вы хотите, чтобы фон был четким. установить label.backgroundColor = [UIColor clearColor]; Label.highlightedTextColor = [UIColor greenColor];   -  person Ashini    schedule 06.05.2013
comment
вы добавляете метку в .xib или программно?   -  person MadhuP    schedule 06.05.2013
comment
@ pm444 только xib, но я могу управлять программно.   -  person Newbee    schedule 06.05.2013
comment
Итак, вы хотите, чтобы серый цвет был цветом фона вашего текста, а не цветом фона метки, я прав?   -  person MadhuP    schedule 06.05.2013
comment
@pm444 Да. Нужно выделить только текст.   -  person Newbee    schedule 06.05.2013
comment
Установите метку sizeToFit и установите рамку для соответствующей позиции. После установки цвета фона.   -  person rptwsthi    schedule 06.05.2013
comment
Просьба Downvotor к вам упомянуть комментарий?   -  person Buntylm    schedule 06.05.2013
comment
Я ответил на тот же вопрос здесь: stackoverflow.com/a/41161425/1980246   -  person Timur Bernikovich    schedule 15.12.2016


Ответы (4)


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

Решение для iOS 6 и более поздних версий заключается в использовании строк с атрибутами:

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

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

label.attributedText = s;
person Mike Weller    schedule 06.05.2013
comment
Я пока понятия не имею о NSMutableAttributedString, во всяком случае, он работает нормально. Спасибо. - person Newbee; 06.05.2013
comment
Я пробовал описанный выше процесс. Со мной это не сработало. :| i.imgur.com/XhuVL9q.png?1 - person Awais Tariq; 24.03.2014
comment
Это не работает, как ожидалось в вопросе: он также добавляет цвет фона к пустым местам, созданным переносом слов. Проверьте: Выделите только текст в UILabel - person Damasio; 10.12.2015
comment
не будет хорошо работать с многострочными текстами, если вы хотите выделить только текст, а не пустые места - person SPS; 21.01.2021

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

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]];

person xapslock    schedule 06.05.2013
comment
Это не будет работать правильно, если текст обтекает несколько строк. Этот зеленый вид может формировать только одиночные прямоугольники. Если во второй строке только 1 слово, будет выделена вся строка. - person Mike Weller; 06.05.2013
comment
Все верно, но если вам нужно поддерживать любую iOS ‹6 и вы не можете использовать NSMutableAttributedString, то это может быть самое простое решение. - person xapslock; 06.05.2013

попробуй это

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];
person SAMIR RATHOD    schedule 06.05.2013

У вас может быть 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.

person gagan sharma    schedule 06.05.2013
comment
Пожалуйста, укажите причину отрицательного голосования !! Так что я могу исправить свой ответ. - person gagan sharma; 06.05.2013