我正在使用xcode 5,同时使用设置字体到textview,我正在使用CGContext
绘制线条,我发现一些奇怪的问题,font.lineHeight
的值在iOS6和iOS7之间发生变化。
例如,在iOS6中font.lineHeight
= 25.000000但是
在iOS7中font.lineHeight
= 21.850000
因此在textview中线条没有正确绘制。
这是我的代码,注意:self
是UITextview
- (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);
}
答案 0 :(得分:2)
以下是iOS7 UILabel
中几行19pt Helvetica的截图。如您所见,两个Ls间隔4行之间有88px(非视网膜)。因为,88/4 = 22,看起来21.85确实是正确的行间距。
你得到不同的结果吗?
如果iOS6和iOS7之间的间距从25变为22,我猜Apple会在修改操作系统外观时修改字体指标。