iOS6和iOS7之间的UIFont线高和领先值发生了变化

时间:2014-03-04 05:06:22

标签: ios uitextview cgcontext uifont

我正在使用xcode 5,同时使用设置字体到textview,我正在使用CGContext绘制线条,我发现一些奇怪的问题,font.lineHeight的值在iOS6和iOS7之间发生变化。

例如,在iOS6中font.lineHeight = 25.000000但是              在iOS7中font.lineHeight = 21.850000

因此在textview中线条没有正确绘制。

这是我的代码,注意:selfUITextview

- (id)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];
if (self) {
    self.backgroundColor = [UIColor clearColor];
    self.font = [UIFont fontWithName:@"Helvetica" size:19];
}
return self;
}

- (void)drawRect:(CGRect)rect {

//Get the current drawing context   
CGContextRef context = UIGraphicsGetCurrentContext(); 
//Set the line color and width
CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:0.784 green:0.675 blue:0.576 alpha:1.0].CGColor);
CGContextSetLineWidth(context, 1.0f);
//Start a new Path
CGContextBeginPath(context);

//Find the number of lines in our textView + add a bit more height to draw lines in the empty part of the view
NSUInteger numberOfLines = (self.contentSize.height + self.bounds.size.height) / self.font.lineHeight;

//Set the line offset from the baseline. (I'm sure there's a concrete way to calculate this.)
CGFloat baselineOffset = 3.5f;

//iterate over numberOfLines and draw each line
for (int x = 0; x < numberOfLines; x++) {
    //0.5f offset lines up line with pixel boundary
    CGContextMoveToPoint(context, self.bounds.origin.x, self.font.lineHeight*x + 0.5f + baselineOffset);
    CGContextAddLineToPoint(context, self.bounds.size.width, self.font.lineHeight*x + 0.5f + baselineOffset);

}

//Close our Path and Stroke (draw) it
CGContextClosePath(context);
CGContextStrokePath(context);
}

1 个答案:

答案 0 :(得分:2)

以下是iOS7 UILabel中几行19pt Helvetica的截图。如您所见,两个Ls间隔4行之间有88px(非视网膜)。因为,88/4 = 22,看起来21.85确实是正确的行间距。

你得到不同的结果吗?

如果iOS6和iOS7之间的间距从25变为22,我猜Apple会在修改操作系统外观时修改字体指标。

enter image description here