佚名通过本文主要向大家介绍了标准文本字号,文本字号要求,正规文本字号,文本字号,合同文本字号等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 求解iOS 绘制文本字号与文本行高的关系
描述:
打印结果:
2016-06-04 10:38:00.982 LedArt[1156:51382] height:76.375000;height/fontSize:1.193359
也就是说,如果我想得到64高度的图片,那么我得将字号重新计算:fontSize/1.2,但是这样得到的图片文本内容并没有铺满整个画布,而且中英文所得到的图片不一样,纯中文得到的图片顶部对齐,英文是居中对齐,绘制代码如下:
有什么办法可以让文本内容铺满整个画布、或者退而求其次让中英文形成一样的布局
下面是两张绘制的图片:


解决方案1:
描述:
IOSNSAttributedStringCoreText
在使用CoreText框架绘制NSAttributedString时,给文本内容设置64号字体如下:
CGFloat f /> NSMutableAttributedString * tempString=[[NSMutableAttributedString alloc] initWithString:@"test"];
[tempString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:fontSize] range:NSMakeRange(0, tempString.length)];
CGSize size= [tempString size];
NSLog(@"height:%f;height/fontSize:%f",size.height,size.height/fontSize);
打印结果:
2016-06-04 10:38:00.982 LedArt[1156:51382] height:76.375000;height/fontSize:1.193359
也就是说,如果我想得到64高度的图片,那么我得将字号重新计算:fontSize/1.2,但是这样得到的图片文本内容并没有铺满整个画布,而且中英文所得到的图片不一样,纯中文得到的图片顶部对齐,英文是居中对齐,绘制代码如下:
//设置画布透明,1倍缩放
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 1);
//获取bitmap上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//旋转一下方向,否则绘制出来的图片是上下颠倒的
CGContextConcatCTM(context, CGAffineTransformScale(CGAffineTransformMakeTranslation(0, height), 1.0, -1.0));
//文本绘制区域
CGRect textRect = CGRectMake(0, 0, width, height);
//设置画布颜色
if(backgroundColor!=nil)
{
CGContextSetFillColorWithColor(context, [backgroundColor CGColor]);
CGContextFillRect(context, textRect);
}
//自定义绘制NSAttributedString
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString);
//添加文本绘制路径
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, textRect);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
//释放使用的资源
CFRelease(path);
CFRelease(framesetter);
//绘制文本内容
CTFrameDraw(frame, context);
CFRelease(frame);
//获取生成的图片
UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
有什么办法可以让文本内容铺满整个画布、或者退而求其次让中英文形成一样的布局
下面是两张绘制的图片:


解决方案1:
字体基线的问题,郁闷的是中文字体没有基线的概念,只有西文字体有,中文字体是靠上下边界来调整字体位置的,既ascent和descent
http://blog.csdn.net/qqaniu/article/details/16364501
这篇文章有教你怎么调整中文字体的上下边界
另外一种比较暴力的解决办法就是直接调整内容的区域
比如
button.contentEdgeInsets = UIEdgeInsetsMake(2f, 0.0f, -2f, 0.0f);