Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UILabel: Custom underline color?

I need the text of a UILabel to be black, but have a light gray underline under the text. Is this possible with NSAttributedString or TTTAttributedLabel? Or is custom drawing using Core Graphics needed?

CLARIFICATION: I need a specific color text on a different color underline. Example: blue text on red underline.

like image 819
ninjaneer Avatar asked Mar 15 '14 05:03

ninjaneer


4 Answers

You can do with NSAttributedString as below.

NSMutableAttributedString* string = [[NSMutableAttributedString alloc]initWithString:@"you string"];
[string addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, string.length)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, string.length)];//TextColor
[string addAttribute:NSUnderlineStyleAttributeName value:underlineNumber range:NSMakeRange(0, string.length)];//Underline color
[string addAttribute:NSUnderlineColorAttributeName value:[UIColor lightGrayColor] range:NSMakeRange(0, string.length)];//TextColor
 yourlabel. attributedText = string;

Note: You can also underline particular range of string as like in this post. Also note down, it works ios6+ only.

like image 77
Mani Avatar answered Nov 10 '22 11:11

Mani


Instead of creating a local NSMutableAttributedString and adding attributes one by one, we can always create multiple attributes in one single line (using NSDictionary symbols - @ { } ) to a specific UILabel including the actual text.

Objective C:

[someUILabel setAttributedText:
  [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@", [someObject stringProperty]]
                                  attributes:@{NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick),
                                              NSUnderlineColorAttributeName:[[UIColor alloc] initWithRed:0.953f green:0.424f blue:0.416f alpha:1.00f]}]];

In the above example we have set an underline which is also bold - total 2 attributes.

Swift:

self.someUIButton.setAttributedTitle(NSAttributedString(string: "UIButtonStringTitle", attributes: [NSUnderlineStyleAttributeName : 1]), forState: .Normal)
like image 41
OhadM Avatar answered Nov 10 '22 11:11

OhadM


// Print `str` in black, and underline the word STRING in gray.
NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:@"This is my STRING"];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, str.length-7)];
[str addAttribute:NSUnderlineColorAttributeName value:[UIColor grayColor] range:NSMakeRange([str length]-6, 6)];
[str addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:NSMakeRange([str length]-6, 6)];

_label.attributedText = str; // assuming you have an iVar name `label`
like image 1
ArtSabintsev Avatar answered Nov 10 '22 09:11

ArtSabintsev


NSAttributedString *title;

title = [[NSAttributedString alloc] initWithString:@"iphone app" for NSAttributedString" attributes:@{ NSFontAttributeName : [UIFont fontWithName:@"Noteworthy-Bold" size:36], NSUnderlineStyleAttributeName : @1 , NSStrokeColorAttributeName : [UIColor blackColor]}]; 

UILabel *label;

label = [[UILabel alloc] initWithFrame:CGRectMake( (self.view.bounds.size.width - title.size.width) / 2.0f, 40.0f, title.size.width, title.size.height)];
label.attributedText = title; 
[self.view addSubview:label];
like image 1
NIKETA SETH Avatar answered Nov 10 '22 09:11

NIKETA SETH