核心文本与UITextView文本格式完全相同?

pnm*_*nmn 11 iphone uitextview ipad core-text ios

我正试图在iPad中设置一个CTFrame与我UITextView的文本格式完全匹配的文件.首先,我将UITextView文本转换为属性字符串.然后我设置了绘图框的宽度和高度,其中Core Text将绘制文本.我成功地使用Core Text绘制文本,但UITextViewCore Text显示略有不同的结果,即使我使用相同的字体和大小.具体来说,当我使用时[UIFont systemFontOfSize:21],每个空格中的UITextView像素比Core Text的结果多一个像素.

对于短句或单词是可以的,但如果UITextView和Core Text有多行,则它们的结果会变得非常不同.例如,UITextView对行尾的一个单词执行自动换行,而Core Text将该单词保留在同一行.如果你看到附图,最后一个单词"段落"的起始位置已经非常不同了(由于8个空格字符,8个像素的间隙).

更糟糕的是,如果我使用不同的字体,例如添加到我的项目中的自定义字体,则每个字符都会UITextView有1个像素.

我正在使用Core Text来查找当前光标的像素位置UITextView,因此它们彼此完全匹配,每行包含相同数量的字符和单词.

问题:有没有办法使Core Text对象与UITextView的文本格式完全匹配?

谢谢!

这是我如何设置属性字符串的代码.(我刚刚关注了Core Text Guide.)

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);
Run Code Online (Sandbox Code Playgroud)

-

-

这是一张照片.

替代文字

Olo*_*man 3

您的解决方案可能适用于特定磅值的特定字体,但一般情况下您不能依赖它。CoreText 与普通的 UILabels、UITextView:s 或 UIStringDrawing 根本不兼容,因此您不能混合使用它们。

您要么必须仅使用 CT 函数来处理所有字符串(包括实现自定义输入,如果您需要的话),要么根本不使用它们。