简体   繁体   中英

How to highlight only text in UILabel - IOS

I just want to highlight only text in UILabel , I have tried by giving backgroundColor for label, but it is highlighting the empty spaces also looks not good. So Is there any way to highlight text without resizing UILabel .

Please check the image, here labels are bigger than the text (center aligned)

在此输入图像描述

Thanx.

Most of the other solutions don't consider text that spans multiple lines while still only highlighting the text, and they are all pretty hacky involving extra subviews.

An iOS 6 and later solution is to use attributed strings:

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

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

label.attributedText = s;

This will add a subview behind the text, with the correct size:

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

And don't forget: [label setBackgroundColor:[UIColor clearColor]];

try this

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

You can have a UIImageView , set its background color of your choice then place your UIlabel on it. That will surely solve your problem. Here is Workaround code :

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

You can also achieve the same using Interface Builder.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM