Ios 如何在UITextView中滚动到当前光标位置?
我在整个S.O.搜索了一个简单的解决方案,获取光标的当前位置,然后滚动到它(假设键盘可见)。在某些情况下,大多数情况似乎过于复杂和/或无效。无论光标是否在键盘下方,我如何确保每次滚动都能正常工作?1)在执行此操作之前,请确保Ios 如何在UITextView中滚动到当前光标位置?,ios,swift2,Ios,Swift2,我在整个S.O.搜索了一个简单的解决方案,获取光标的当前位置,然后滚动到它(假设键盘可见)。在某些情况下,大多数情况似乎过于复杂和/或无效。无论光标是否在键盘下方,我如何确保每次滚动都能正常工作?1)在执行此操作之前,请确保UITextView的contentInset设置正确,并且textView已经是第一响应者。contentInset属性告诉textView用户可见区域的位置。如果键盘可见,请确保已将textView.contentInset.bottom属性设置为键盘的上边框,否则tex
UITextView
的contentInset
设置正确,并且textView
已经是第一响应者。contentInset
属性告诉textView
用户可见区域的位置。如果键盘可见,请确保已将textView.contentInset.bottom
属性设置为键盘的上边框,否则textView
可能会滚动到键盘后面不可见的空间
有关更多信息,请参阅本S.O.帖子:
2) 在插入准备就绪且textView
为firstResponder
后,我调用以下函数:
private func scrollToCursorPositionIfBelowKeyboard() {
let caret = textView.caretRectForPosition(textView.selectedTextRange!.start)
let keyboardTopBorder = textView.bounds.size.height - keyboardHeight!
// Remember, the y-scale starts in the upper-left hand corner at "0", then gets
// larger as you go down the screen from top-to-bottom. Therefore, the caret.origin.y
// being larger than keyboardTopBorder indicates that the caret sits below the
// keyboardTopBorder, and the textView needs to scroll to the position.
if caret.origin.y > keyboardTopBorder {
textView.scrollRectToVisible(caret, animated: true)
}
}
可选:如果您只想滚动到光标的当前位置(假设textView
当前是firstResponder
,并且contentInset
之前已正确设置),只需调用:
private func scrollToCursorPosition() {
let caret = textView.caretRectForPosition(textView.selectedTextRange!.start)
textView.scrollRectToVisible(caret, animated: true)
}
额外信息:要将文本视图
滚动条设置为适当的高度,请通过以下操作修改滚动指示符号集
:
// This is not relative to the coordinate plane. You simply set the `.bottom` property
// as if it were a normal height property. The textView does the rest for you.
textView.contentInset.bottom = keyboardHeight
textView.scrollIndicatorInsets = textView.contentInset // Matches textView's visible space.