为什么characterRange(at .zero)== nil?

时间:2018-12-27 06:17:10

标签: ios swift uitextview uitextposition uitextrange

我有一个UITextView,其中包含一些超出其范围的文本。因此,启用了垂直滚动。

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

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

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

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

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

characterRange(at: .zero)

也返回nil –正值y较低的文本位置。

为什么?

如何为第一个可见字符获得可靠的UITextPosition

2 个答案:

答案 0 :(得分:1)

请尝试以下代码(如果在textView子类中调用,请删除UITextView

let firstVisibleCharacterIndex = textView.layoutManager.characterIndex(for: textView.contentOffset, in: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

答案 1 :(得分:0)

我认为这可以为您提供帮助。

select * from temp;

 id | val
----+----------
 1 | 1.234567