ios – drawInRect:withAttributes文本中心垂直或放一些填充

我正在使用drawInRect:withAttributes在iOS 7中为pdf添加文本.我需要将文本垂直居中在CGRect中,或至少我需要在CGRect边框和文本之间保留一些间隙/填充.否则文字看起来更接近盒子.有什么属性可以做到吗?如果不是最好的方法呢?以下是我的代码
我试过NSBaselineOffsetAttributeName,但它只增加了每一行之间的差距,而不是与rect的边界的差距.

谢谢

CGContextRef    currentContext = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(currentContext,bgColor.CGColor);
CGRect renderingRect = CGRectMake(startPoint.x,startPoint.y,width,height);
CGContextFillRect(currentContext,renderingRect);

NSDictionary *attributes = @{ NSFontAttributeName: font,NSForegroundColorAttributeName: fgColor,};

[textToDraw drawInRect:renderingRect  withAttributes:attributes];

解决方法

首先,您需要计算文本的高度,使用此信息和边框矩形的高度,您可以轻松计算新的矩形以使文本居中.

我将分享一段我用来垂直居中的代码.在我的情况下,我使用一个不同的drawInRect函数(drawInRect:withFont …),我使用sizeWithFont来计算文本的大小. YOu会调整这个代码来使用你已经使用的函数(带有属性),或者使用我在这里发布的函数.

UIFont *font = [UIFont systemFontOfSize:14];
CGSize size = [text sizeWithFont:font];
if (size.width < rect.size.width)
{
    CGRect r = CGRectMake(rect.origin.x,rect.origin.y + (rect.size.height - size.height)/2,rect.size.width,(rect.size.height - size.height)/2);
    [text drawInRect:r withFont:font lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentLeft];
}

相关文章

背景 前端时间产品经理决定使用百度统计,使得 工程B 中原统计sdk-友盟统计,需要被去除。之前尝试去除...
结论: alloc负责分配内存和创建对象对应的isa指针; init只是返回alloc生成的对象。 所以alloc后,多次...
更新 如果UI愿意把启动图切割成n份,按一定约束在launchscreen.storyboard中进行排版,启动图效果会更好...
最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。...
// // ViewController.m // paintCodeTestOC //gif // Created by LongMa on 2019/7/25. // #import &a...
背景介绍 一般情况下,出于省电、权限、合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但...