Я работаю над прокруткой клавиатуры до текущей позиции курсора в UITextView.
Там я использую textViewDidChange так:
func textViewDidChange(_ textView: UITextView) {
if let cursorPosition = textView.selectedTextRange?.end {
let caretPositionRect = textView.caretRect(for: cursorPosition)
print(caretPositionRect, "caret")
DispatchQueue.main.async{ [weak self] in
let pointsuperview = textView.convert(caretPositionRect, to: self?.vc?.mainView.scrollView)
self?.vc?.mainView.scrollView.scrollRectToVisible(pointsuperview, animated: false)
print(pointsuperview, "ps")
}
}
}
Это работает, пока есть персонаж или я возвращаюсь. Но если я добавляю новую строку, нажимая ввод в последнюю строку, я получаю вывод, подобный этому:
(инф, инф, 0,0, 0,0) каретка
Когда я использую клавишу возврата, я снова получаю действительные значения.
допустимые значения выглядят так:
(4,0, 7,0, 2,0, 21,5) каретка
Тот же результат при использовании selectedTextRange.start
Я пытался решить этот вопрос:
Получение и установка положения курсора UITextField и UITextView в Swift