我在网页视图中更改了一个文本方法,以检测当前插入位置的可见矩形。
UITextPosition *endPos = self.selectedTextRange.end;
CGRect rect = [self caretRectForPosition:endPos];
[self scrollRectToVisible:rect animated:NO];
除非我在文档末尾按下键盘上的删除键,否则效果很好。在这种情况下,它会滚动到文档的开头,这是意料之外的。
答案 0 :(得分:1)
我遇到了类似的问题......它似乎是文本视图中的计时问题。 我的解决方案是:
答:检测来自caretRectForPosition的无效结果。在我的例子中,无效坐标似乎总是要么是大的负值(-1.0似乎是i.O.!)或者是origin.y的“无限”。
B:在短时间后重新询问插入位置的文本视图。我检查了一些延迟值; 0.05似乎足够了。
代码:
- (void)textViewDidChange:(UITextView *)pTextView {
UITextPosition* endPos = pTextView.selectedTextRange.end;
CGRect caretRectInTextView = [pTextView caretRectForPosition:endPos];
if ((-1.0 > CGRectGetMinY(caretRectInTextView)) ||
(INFINITY == CGRectGetMinY(caretRectInTextView))) {
NSLog(@"Invalid caretRectInTextView detected!");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)),
dispatch_get_main_queue(),
^{
// Recall
[self textViewDidChange:pTextView];
});
return;
}
... your code ...
}