2015-12-09 3 views
-1

Я хочу добиться того, чтобы UILabel подчеркнуто, но определенным образом.Подчеркивание UIlabel, поэтому подчеркивание всегда достигает границ

Я знаю, как сделать UILabel подчеркнутым, но поскольку это будет динамический текст, я не знаю, как долго он будет.

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

я набросал его, чтобы дать вам лучшее представление о том, что я на самом деле пытаются достичь:

enter image description here

Каково Ваше мнение, как подойти к такой проблеме?

Должен ли я добавить белую строку как UIView в любое время текст переходит к другой строке?

Или, может быть, добавить пробел в код, если длина текста короче границ текущей строки?

+0

Вы имеете в виду вы хотите подчеркнуть до текста? –

+0

Используйте NSMutableAttributedString. Перейдите по этой ссылке http://stackoverflow.com/questions/13122207/how-to-make-an-underlined-text-in-uilabel – BHUMICA

+0

Приведенная строка будет подчеркивать только мой текст и не будет выравниваться слева, исправьте меня Если я ошибаюсь – DCDC

ответ

0

enter image description here Я придумал решение с пользовательским классом меток и переопределить метод drawRect в этом пользовательском классе UIlabel.

CustomLabel.h

#import <UIKit/UIKit.h> 

@interface CustomLabel : UILabel 

@end 

CustomLabel.m

#import "CustomLabel.h" 

@implementation CustomLabel 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(ctx, 1.0f); 
    float Left = self.center.x - self.frame.size.width/2.0; 
    float Right = self.center.x + self.frame.size.width/2.0; 
    CGContextMoveToPoint(ctx, Left, self.bounds.size.height - 1); 
    CGContextAddLineToPoint(ctx, Right, self.bounds.size.height - 1); 
    CGContextStrokePath(ctx); 
    [super drawRect:rect]; 
} 

@end 

в классе Просто импортировать этот пользовательский класс.

#import "CustomLabel.h" 

////// you can create labels now which are having underline to bounds. 

-(void)CreateCustomLabel 
{ 
    CustomLabel *custom = [[CustomLabel alloc] initWithFrame:CGRectMake(0, 150, SCREEN_WIDTH-40, 50)]; 
    custom.text = @"Your Text Here"; 
    custom.backgroundColor = [UIColor redColor]; 
    [self.view addSubview:custom]; 
} 
+0

не работает, просто рисует прямоугольник вокруг UILabel – DCDC

+0

просматривает снимок экрана с корым кодом c. , Я могу отправить почтовый индекс –

0

сначала нужно установить текст для помеченной затем вызвать этот метод:

- (void)underlineLabel:(UILabel*)lbl { 

if (![lbl respondsToSelector:@selector(setAttributedText:)]) { 
    return; 
} 
NSMutableAttributedString *attributedText; 
if (!lbl.attributedText) { 
    attributedText = [[NSMutableAttributedString alloc] initWithString:lbl.text]; 
} else { 
    attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:lbl.attributedText]; 
} 
long len = [lbl.text length]; 

    [attributedText addAttribute:NSUnderlineColorAttributeName value:[UIColor grayColor] range:NSMakeRange(0,len)]; 


[attributedText addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:1] range:NSMakeRange(0, len)];//Underline color 

lbl.attributedText = attributedText; 
} 
+0

могу ли я попросить о быстрой реализации? – DCDC

0
func underlineLabel(label: UILabel) { 

    if !lbl.respondsToSelector("setAttributedText:") { 
     return 
    } 

    var attributedText = NSMutableAttributedString() 


    if !(lbl.attributedText != nil) { 
     attributedText = NSMutableAttributedString(string:label.text!) 
    } 

    else { 
     attributedText = NSMutableAttributedString(attributedString: label.attributedText!) 
    } 

    let str = label.text; 

    let len = str?.characters.count; 


    attributedText.addAttribute(NSUnderlineColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0, len!)) 

    attributedText.addAttribute(NSUnderlineStyleAttributeName , value:1, range: NSMakeRange(0, len!)) 
    //Underline color 
    lbl.attributedText = attributedText 
} 
+0

это не работает, оно подчеркивает до последнего символа, а не до конца строки – DCDC

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