0

我有UITextView一些超出其界限的文本。因此,启用垂直滚动。

现在我想找到第一个可见字符的位置。这是我尝试过的:

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

这在大多数情况下都有效。但是,当我向上滚动并接近文本的开头时,该characterRange(at:)函数突然返回nil.

一开始我认为这只是因为弹跳(当contentOffset.y值很快变为<0时)。但这不是(唯一的)原因。

我尝试了其他一些值,并惊讶地发现

characterRange(at: .zero)

也返回nil- 就像具有低正值的文本位置一样y

这是为什么?

如何获得UITextPosition第一个可见角色的可靠信息?

4

1 回答 1

2

请尝试此代码(textView如果您在UITextView子类中调用它,请删除它):

let firstVisibleCharacterIndex = textView.layoutManager.characterIndex(for: textView.contentOffset, in: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
于 2018-12-27T06:47:37.723 回答