为UIlabel加下划线,以便下划线始终达到界限

时间:2015-12-09 10:16:59

标签: ios swift uilabel

我想要实现的是UILabel以特定方式加下划线。

我知道如何使UILabel加下划线,但由于这将是一个动态文本,我不知道它会持续多长时间。

任何时候标签进入一个新行,我想使下划线与上面的一行对齐,无论文本长度如何。

我草拟了它,让你更好地了解我实际上想要实现的目标:

enter image description here

您有什么看法,如何解决这个问题?

我是否应该在文本跳到另一行时将白线添加为UIView

或者当文本长度短于当前行的边界时,可能在代码中添加一些空格?

3 个答案:

答案 0 :(得分:0)

enter image description here我已经提出了自定义标签类的解决方案,并在该自定义UIlabel类中覆盖了drawRect方法。

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

答案 1 :(得分: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;
}

答案 2 :(得分: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
}