为什么使用CoreText渲染文本布局,文本可以在1px宽度路径中显示?

时间:2012-11-26 11:48:28

标签: ios ipad core-text

我写了一个代码,使用CoreText布局一些文本如下图所示。红色矩形是文本区域,黑色矩形对于图像或其他对象是空的。我使用kCTFrameClippingPathsAttributeName告诉CoreText,黑色矩形不会显示文本。

core text text layout

详细图片如下:

enter image description here

为什么某些文字会在这个位置出现?红色矩形和黑色矩形只有一个非常小的区域,大小只有1px宽,为什么文字会出来?

右侧红色矩形框为(533, 40, 440, 668),右侧小矩形框为(534, 98, 440, 399)

这样的代码:

CGPathRef textArea; 

// An array of clipping paths
NSMutableArray * clippingPaths = [NSMutableArray array];
for (TNPageMedium *medium in self.media) {
    NSDictionary *clippingPathDict = @{(NSString *)kCTFramePathClippingPathAttributeName:(__bridge id)path};
    [clippingPaths addObject:clippingPathDict];
}

NSDictionary  *optionsDict = @{(NSString*)kCTFrameClippingPathsAttributeName : clippingPaths};

// create frame using texAreaPath, an optionDictionary contains clipping paths
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(pos, 0), textAreaPath, (__bridge CFDictionaryRef)(optionsDict));

// Draw Frame
CTFrameDraw(frame, context);

1 个答案:

答案 0 :(得分:2)

您的attributedString似乎缺少段落样式信息。

我猜你是从NSAttributedString创建的NSString,并没有在属性字典中提供kCTParagraphStyleAttributeName键值。