当混合中出现新行字符时,UITextView firstRectForRange无法正常工作

Mik*_*e S 2 uitextview ios nsrange

我正在使用此方法将NSRange转换为CGRect,因为它与UITextView相关:

- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
    UITextPosition *beginning = textView.beginningOfDocument;
    UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
    UITextPosition *end = [textView positionFromPosition:beginning offset:range.location+range.length];
    UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
    CGRect rect = [textView firstRectForRange:textRange];
    return rect;
}
Run Code Online (Sandbox Code Playgroud)

这个问题的答案是有人问我同样的问题.上述方法适用于此:

这是一个伟大的文本领域是的,它是findthistoken

不像这样:

this is a great one
(new line)
(new line)
findthistoken
Run Code Online (Sandbox Code Playgroud)

它似乎完全忽略了有2个新行字符的事实?:/

如何使用新的行字符?

小智 10

您可以强制self.textView立即确保textView的布局

 [self.textView.layoutManager ensureLayoutForTextContainer:self.textView.textContainer];
Run Code Online (Sandbox Code Playgroud)

在frameOfTextRange:call之前放置它会给你正确的rect.