2015-08-06 6 views
3

Я искал по всему S.O. для простого решения получить текущее положение курсора, затем прокрутите до него (при условии, что клавиатура - видна). Большинство из них кажутся чрезмерно сложными и/или неэффективными в определенных ситуациях. Как я могу выполнять прокрутку каждый раз, независимо от того, находится ли курсор под клавиатурой или нет?Как прокручивать текущую позицию курсора в UITextView?

ответ

3

1) Убедитесь, что ваш UITextView «s contentInset s правильно установить & ваш textView уже firstResponder, прежде чем делать это. Свойство contentInset сообщает textView, где видимая область предназначена для пользователя. Если клавиатура видна, убедитесь, что свойство textView.contentInset.bottom установлено на верхнюю границу клавиатуры, иначе textView может прокрутить до пробела, невидимого, за клавиатурой.

См. Это S.O. опубликовать для получения дополнительной информации: What's the UIScrollView contentInset property for?

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) 
    } 
} 

Дополнительный: Если вы просто хотите прокрутки текущей позиции курсора (если предположить, что в настоящее время textViewfirstResponder и 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. 
Смежные вопросы