iOS 7 Text Kit のクラスの「スタック」を自分で構築し、描画するグリフを要求することで、グラフィックス コンテキストに直接描画しています。これは私のカスタム 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 の単なるバグではないかと少し心配しています。