Почему CharacterRange (at: .zero) == ноль? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть UITextView с некоторым текстом, который превышает его границы.Таким образом, вертикальная прокрутка включена.

Теперь я хочу найти положение первого видимого символа.Вот что я попробовал:

let firstCharacterPosition = characterRange(at: contentOffset)?.start

Это работает в большинстве случаев.Однако, когда я прокручиваю вверх и приближаюсь к началу текста, функция characterRange(at:) неожиданно возвращает nil.

В начале я думал, что это только из-за отскока (когда contentOffset.yзначение вскоре становится <0).Но это не единственная причина. </p>

Я попробовал некоторые другие значения и с удивлением обнаружил, что

characterRange(at: .zero)

также возвращает nil - так же, как текстовые позиции с низким положительнымy значение.

Почему это так?

Как получить надежный UITextPosition для первого видимого символа?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Пожалуйста, попробуйте этот код (удалите textView, если вы вызываете его внутри UITextView подкласса):

let firstVisibleCharacterIndex = textView.layoutManager.characterIndex(for: textView.contentOffset, in: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
0 голосов
/ 27 декабря 2018

Я думаю, что это может вам помочь.

if let selectedRange = textField.selectedTextRange {
    let firstCharacterPosition = textField.offset(from:textField.beginningOfDocument,to:selectedRange.start) 
}
...