UITextView firstRectForRange not working when there's new line characters in the mix

半腔热情 提交于 2019-12-04 01:50:37

问题


I'm using this method for converting a NSRange to a CGRect as it relates to a 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;
}

This question's answer has someone asking the same question as me. The above method works great for this:

this is a great text field yes it is findthistoken

Not so great like this:

this is a great one
(new line)
(new line)
findthistoken

It seems to simply ignore the fact that there are 2 new lines characters? :/

How do I make it work with new line characters?


回答1:


You can force self.textView to ensure the layout of textView immediately with

 [self.textView.layoutManager ensureLayoutForTextContainer:self.textView.textContainer];

Placing that before your frameOfTextRange: call will gives you right rect.



来源:https://stackoverflow.com/questions/25604493/uitextview-firstrectforrange-not-working-when-theres-new-line-characters-in-the

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!