2011-09-27 117 views
3

UILabel其字符串被设置在运行时。 UILabel中的文本集中对齐。我想在标签文本下方显示下划线。不过,该行应具有X相同的文本开始的地方(考虑居中对齐)和宽度等于文本宽度(未标签宽度)。对于下划线我创建了一个UIView,并设置其背景色。但我无法按照自己的意愿确定下划线的长度。下划线的UILabel文本

下面是我用的代码:

UILabel *blabel = [[UILabel alloc] initWithFrame:CGRectMake(XX, 6, 271, 26)]; 
    blabel.text = [m_BCListArray objectAtIndex:tagcount]; 
    blabel.textAlignment = UITextAlignmentCenter; 
    blabel.backgroundColor = [UIColor clearColor]; 
    blabel.textColor = [UIColor whiteColor]; 
    blabel.font = [UIFont systemFontOfSize:14]; 
    [scrollDemo addSubview:blabel]; 

    //underline code 
    CGSize expectedLabelSize = [[m_BCListArray objectAtIndex:tagcount] sizeWithFont:blabel.font constrainedToSize:blabel.frame.size lineBreakMode:UILineBreakModeWordWrap]; 
    CGRect newFrame = blabel.frame; 
    newFrame.size.height = expectedLabelSize.height; 
    blabel.frame = CGRectMake(blabel.frame.origin.x, blabel.frame.origin.y, 271, expectedLabelSize.height); 
    blabel.numberOfLines = 1; 
    //[blabel sizeToFit]; 
    int width=blabel.bounds.size.width; 
    int height=blabel.bounds.size.height; 

    UIView *viewUnderline=[[UIView alloc] init]; 
    int len = [[m_BCListArray objectAtIndex:tagcount]length]; 
    viewUnderline.frame=CGRectMake(XX, 26, len, 1); 
    viewUnderline.backgroundColor=[UIColor whiteColor]; 
    [scrollDemo addSubview:viewUnderline]; 
    [viewUnderline release]; 

如何根据文本,我得到我修复线的宽度?

+0

带给如果可能的话,你可以采取的UIWebView来代替的UILabel .. –

+0

它又有什么不同? – Nitish

+0

使用UIWebView的U可以通过HTML字符串,你可以有你的网页所有所需的效果.. –

回答

13
UILabel *blabel = [[UILabel alloc] initWithFrame:CGRectMake(XX, 6, 271, 26)]; 
blabel.text = [m_BCListArray objectAtIndex:tagcount]; 
blabel.textAlignment = UITextAlignmentCenter; 
blabel.backgroundColor = [UIColor clearColor]; 
blabel.textColor = [UIColor whiteColor]; 
blabel.font = [UIFont systemFontOfSize:14]; 
[scrollDemo addSubview:blabel]; 

//underline code 
CGSize expectedLabelSize = [[m_BCListArray objectAtIndex:tagcount] sizeWithFont:blabel.font constrainedToSize:blabel.frame.size lineBreakMode:UILineBreakModeWordWrap]; 

UIView *viewUnderline=[[UIView alloc] init]; 
viewUnderline.frame=CGRectMake((blabel.frame.size.width - expectedLabelSize.width)/2, expectedLabelSize.height + (blabel.frame.size.height - expectedLabelSize.height)/2, expectedLabelSize.width, 1); 
viewUnderline.backgroundColor=[UIColor whiteColor]; 
[scrollDemo addSubview:viewUnderline]; 
[viewUnderline release]; 
+0

感谢阿曼。你让我今天一整天都感觉很好。 – Nitish

+0

非常欢迎,Nitish –

+2

但是这不会支持多行标签 – muthukumar

5

我只是简化了执行了一下:

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 320, 30)]; 
myLabel=[self setLabelUnderline:myLabel]; 

-(UILabel *)setLabelUnderline:(UILabel *)label{ 
    CGSize expectedLabelSize = [label.text sizeWithFont:label.font constrainedToSize:label.frame.size lineBreakMode:label.lineBreakMode]; 
    UIView *viewUnderline=[[UIView alloc] init]; 
    CGFloat xOrigin=0; 
    switch (label.textAlignment) { 
     case NSTextAlignmentCenter: 
      xOrigin=(label.frame.size.width - expectedLabelSize.width)/2; 
      break; 
     case NSTextAlignmentLeft: 
      xOrigin=0; 
      break; 
     case NSTextAlignmentRight: 
      xOrigin=label.frame.size.width - expectedLabelSize.width; 
      break; 
     default: 
      break; 
    } 
    viewUnderline.frame=CGRectMake(xOrigin, 
            expectedLabelSize.height-1, 
            expectedLabelSize.width, 
            1); 
    viewUnderline.backgroundColor=label.textColor; 
    [label addSubview:viewUnderline]; 
    [viewUnderline release]; 
    return label; 
} 
+0

真的很简单的代码片段....真棒 –

7

这里是我做到了。子类UILabel并绘制线条。确保你在QuartzCore

@interface MyUnderlinedLabel : UILabel 
@end 

#import <QuartzCore/QuartzCore.h> 

@implementation MyUnderlinedLabel 

-(void)drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 

    // Get bounds 
    CGRect f = self.bounds; 
    CGFloat yOff = f.origin.y + f.size.height - 3.0; 

    // Calculate text width 
    CGSize tWidth = [self.text sizeWithFont:self.font]; 

    // Draw underline 
    CGContextRef con = UIGraphicsGetCurrentContext(); 
    CGContextSetStrokeColorWithColor(con, self.textColor.CGColor); 
    CGContextSetLineWidth(con, 1.0); 
    CGContextMoveToPoint(con, f.origin.x, yOff); 
    CGContextAddLineToPoint(con, f.origin.x + tWidth.width, yOff); 
    CGContextStrokePath(con); 
} 

@end