【发布时间】:2011-04-25 17:27:36
【问题描述】:
我正在尝试设置一个与我在 iPad 中的UITextView 的文本格式完全匹配的CTFrame。
首先,我将UITextView 的文本转换为属性字符串。然后我设置了绘图框的宽度和高度,Core Text 将在其中绘制文本。
我成功地使用 Core Text 绘制了文本,但 UITextView 和 Core Text 显示的结果略有不同,即使我使用了相同的字体和大小。
具体来说,当我使用[UIFont systemFontOfSize:21] 时,UITextView 中的每个空格都比 Core Text 的结果多一个像素。
短句或单词没关系,但如果UITextView和Core Text有多行,它们的结果就会变得非常不同。例如,UITextView 在行尾对一个单词执行自动换行,而 Core Text 将该单词保留在同一行中。如果你看附图,最后一个单词“段落”的起始位置已经相差很大(8个空格字符导致8个像素间隙)。
更糟糕的是,如果我使用不同的字体,例如添加到我的项目中的自定义字体,UITextView 中的每个字符都会多出 1 个像素。
我正在使用 Core Text 在UITextView 中查找当前光标的像素位置,因此它们应该完全匹配,每行包含相同数量的字符和单词。
问题:有没有办法让Core Text对象完美匹配UITextView的文本格式?
谢谢!
这是我如何设置属性字符串的代码。 (我只是遵循核心文本指南。)
CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:21.0].fontName, 21.0, NULL);
CFMutableAttributedStringRef attrString2 = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString2, CFRangeMake(0, 0), (CFStringRef) string);
CFAttributedStringSetAttribute(attrString2, CFRangeMake(0, [string length]),kCTFontAttributeName, font);
-
-
这是一张图片。
【问题讨论】:
标签: iphone ipad ios uitextview core-text