1

我通过自己构建 iOS 7 文本工具包“堆栈”类并要求绘制字形来直接绘制到图形上下文中。这是我的自定义 UIView 子类的drawRect:实现:

NSLayoutManager* lm = [NSLayoutManager new];
NSTextStorage* ts = 
    [[NSTextStorage alloc] initWithAttributedString:self.attributedText];
[ts addLayoutManager:lm];
NSTextContainer* tc =
    [[NSTextContainer alloc]
        initWithSize:rect.size];
[lm addTextContainer:tc];
tc.lineFragmentPadding = 0;
NSRange r = NSMakeRange(0,lm.numberOfGlyphs);
[lm drawBackgroundForGlyphRange:r atPoint:CGPointMake(0,10)];
[lm drawGlyphsForGlyphRange:r atPoint:CGPointMake(0,10)];

看起来很无辜,但奇怪的事情正在发生:多余的文本(即文本容器大小的文本过多)被绘制为图形上下文顶部的额外线:

在此处输入图像描述

我可以通过将绘制字形的范围限制为适合文本容器的字形来绕过这个问题:

NSRange r = [lm glyphRangeForTextContainer:tc];

但我觉得我不应该那样做。而且我还在 UITextView 中看到了这个问题(我不是发出绘图调用的人),所以我有点担心这只是 iOS 7 的 TextKit 中的一个错误。

4

0 回答 0