我正在尝试设置一个与iPad中的CTFrame文本格式完全匹配的UITextView
首先,我将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);

--

--

这是一张照片。

最佳答案

您的解决方案可能适用于特定点大小的特定字体,但通常不能依赖它。
CoreText与普通的UILabels,UITextView:s或UIStringDrawing根本不兼容,因此您不能混合使用它们。

您只需要对所有字符串处理使用CT函数(包括在需要时实现自定义输入),或者根本不使用它们。

关于iphone - 核心文字与UITextView文字格式完全相同吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3938833/

10-12 00:19
查看更多