2011-09-27 114 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