我有一个Notes视图控制器和一个大的UITextView。当键盘处于活动状态时,我已确保contentInset已被调整,以便用户可以查看正在输入的内容。这很好。然而,如果textView中已经有大量的文本并且键盘还没有激活,当用户点击textView下部的文本时,textView不会自动滚动到显示他们的光标。只要他们开始输入,textView就会滚动到合适的位置,但是我希望textView在他们点击textView后立即滚动到光标的位置。UITextView - 滚动到选定的地方
这里是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWasShown), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillBeHidden), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func keyboardWasShown(_ notification: Notification) {
let mainViewY = self.view.frame.origin.y
let textViewY = self.textView.frame.origin.y
let oneLineHeight = self.textView.font.lineHeight
let delta = (textViewY - mainViewY) - oneLineHeight
let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
let keyboardHeight = (keyboardSize?.height)!
self.textView.contentInset = UIEdgeInsetsMake(0, 0, keyboardHeight + delta, 0)
self.textView.scrollIndicatorInsets = textView.contentInset
}
func keyboardWillBeHidden(_ notification: Notification) {
self.textView.contentInset = UIEdgeInsets.zero
self.textView.scrollIndicatorInsets = UIEdgeInsets.zero
}
我搜索的人问这个问题,但找不到任何人遇到我的具体问题。
如何确保在用户点击textView以开始在键盘覆盖的textView部分中输入内容时,textView会在他们实际键入之前滚动以显示其光标?
这看起来很有前途..我尝试在我的keyboardWasShown方法中添加'self.textView.scrollRangeToVisible(textView.selectedRange)'(我在改变插入之前和之后都尝试过),我也尝试将它添加到'textViewDidBeginEditing'委托方法。它有时会滚动,但大多数时候它不会......并且它似乎让我在没有基于contentInset的textView滚动的情况下输入(即,我可以键入键盘覆盖textView的东西 - 我遇到的问题通过调整contentInset解决)。有关如何利用该方法的任何提示? –