如何滚动到 UITextView 中的当前光标位置?

Posted

技术标签:

【中文标题】如何滚动到 UITextView 中的当前光标位置?【英文标题】:How to scroll to current cursor position in UITextView? 【发布时间】:2015-08-06 19:30:44 【问题描述】:

我已经在 S.O.获取光标当前位置的简单解决方案,然后滚动到它(假设键盘 可见)。在某些情况下,大多数似乎过于复杂和/或无效。无论光标是否在键盘下方,如何每次都进行滚动?

【问题讨论】:

【参考方案1】:

1) 在执行此操作之前,请确保您的 UITextViewcontentInsets 设置正确并且您的 textView 已经是 firstRespondercontentInset 属性告诉textView 用户可见区域的位置。如果键盘可见,请确保 textView.contentInset.bottom 属性已设置为键盘的上边框,否则 textView 可能会滚动到键盘后面不可见的空间。

请参阅此 S.O.更多信息请发帖:What's the UIScrollView contentInset property for?

2)在我的插图准备好之后,textViewfirstResponder,我调用以下函数:

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)
 

额外信息:为了将textView 滚动条设置为适当的高度,请通过以下方式修改scrollIndicatorInsets

// 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.

【讨论】:

以上是关于如何滚动到 UITextView 中的当前光标位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UIScrollView 滚动到 UITextView 的光标位置?

UITextview 光标移动到行尾

如何将 UITableViewCell 中的 UITextView 滚动到键盘顶部?

如何在 UITextView 中找到光标的位置

WPF RichTextBox 如何滚动到光标所在位置滚动条操作

禁用 UITextView 中的滚动,同时避免在 ios 的当前位置弹跳到顶部和文本不可见