UITextView caretRectForPosition неправильное значение для последнего символа после нажатия клавиши удаления
У меня есть метод для изменения текста в моем веб-представлении, чтобы обнаружить видимый прямоугольник для текущей позиции каретки.
UITextPosition *endPos = self.selectedTextRange.end;
CGRect rect = [self caretRectForPosition:endPos];
[self scrollRectToVisible:rect animated:NO];
Он прекрасно работает, за исключением случаев, когда я нахожусь в конце документа и нажимаю клавишу удаления на клавиатуре. В этом случае он прокручивается к началу документа, что является неожиданным.
1 ответ
У меня была похожая проблема... кажется, проблема синхронизации в текстовом представлении. Мое решение:
A: Обнаружить недопустимый результат из caretRectForPosition. В моем случае недопустимые координаты всегда кажутся либо большими отрицательными значениями (-1,0 кажется iO!), Либо "бесконечными" для 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 ...
}