我想要实现的是UILabel
以特定方式加下划线。
我知道如何使UILabel
加下划线,但由于这将是一个动态文本,我不知道它会持续多长时间。
任何时候标签进入一个新行,我想使下划线与上面的一行对齐,无论文本长度如何。
我草拟了它,让你更好地了解我实际上想要实现的目标:
您有什么看法,如何解决这个问题?
我是否应该在文本跳到另一行时将白线添加为UIView
?
或者当文本长度短于当前行的边界时,可能在代码中添加一些空格?
答案 0 :(得分:0)
我已经提出了自定义标签类的解决方案,并在该自定义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
}