Почему CharacterRange(at: .zero) == ноль?
У меня есть UITextView
с некоторым текстом, который выходит за его пределы. Таким образом, вертикальная прокрутка включена.
Теперь я хочу найти позицию первого видимого персонажа. Вот что я попробовал:
let firstCharacterPosition = characterRange(at: contentOffset)?.start
Это работает в большинстве случаев. Однако, когда я прокручиваю вверх и приближаюсь к началу текста, characterRange(at:)
функция неожиданно возвращается nil
,
В начале я думал, что это только из-за подпрыгивания (когда contentOffset.y
значение вскоре становится < 0). Но это не единственная причина.
Я попробовал некоторые другие значения и с удивлением обнаружил, что
characterRange(at: .zero)
возвращается nil
а также - как текстовые позиции с низким положительным y
значение.
Это почему?
Как я могу получить надежный UITextPosition
для первого видимого символа?
2 ответа
Пожалуйста, попробуйте этот код (удалить textView
если вы звоните внутри UITextView
подкласс):
let firstVisibleCharacterIndex = textView.layoutManager.characterIndex(for: textView.contentOffset, in: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
Я думаю, что это может помочь вам.
if let selectedRange = textField.selectedTextRange {
let firstCharacterPosition = textField.offset(from:textField.beginningOfDocument,to:selectedRange.start)
}