Iphone 给标签文本加下划线
我有Iphone 给标签文本加下划线,iphone,uiview,uilabel,Iphone,Uiview,Uilabel,我有UILabel,它的字符串正在运行时设置。ui标签中的文本居中对齐。我想在标签文本下方显示下划线。但该行的X应与文本开始位置相同(考虑中心对齐),且宽度应等于文本宽度(而不是标签宽度)。对于下划线,我创建了一个ui视图,并设置了其背景色。但我无法按照自己的意愿确定下划线的长度 以下是我使用的代码: UILabel *blabel = [[UILabel alloc] initWithFrame:CGRectMake(XX, 6, 271, 26)]; blabel.text = [
UILabel
,它的字符串正在运行时设置。ui标签
中的文本居中对齐。我想在标签文本下方显示下划线。但该行的X应与文本开始位置相同(考虑中心对齐),且宽度应等于文本宽度(而不是标签宽度)。对于下划线,我创建了一个ui视图
,并设置了其背景色。但我无法按照自己的意愿确定下划线的长度
以下是我使用的代码:
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];
如何根据得到的文本确定行的宽度?我只是稍微简化了实现:
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];
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;
}
我是这样做的。子类UILabel并绘制线。一定要带上夸脱咖啡
@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
@接口MyUnderlinedLabel:UILabel
@结束
#进口
@MyUnderlinedLabel的实现
-(void)drawRect:(CGRect)rect
{
[超级drawRect:rect];
//获得边界
CGRect f=自界;
CGFloat yOff=f.origin.y+f.size.height-3.0;
//计算文本宽度
CGSize tWidth=[self.text sizeWithFont:self.font];
//画下划线
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);
}
@结束
如果可能,您可以使用UIWebView而不是UILabel..这会有什么不同?使用UIWebView可以传递html字符串,并且可以在网页上获得所需的所有效果..是否要使用UIWebView?如果是,则我可以发布两行代码..可能是您需要的代码..我认为如果您使用webView,那么只有您才能获得准确的输出。谢谢阿曼。你让我很开心。但这不支持多行标签。真的很简单的代码片段。。。。令人惊叹的