Как мне добиться автоматической прокрутки в моем текстовом представлении, когда текст в Swift опускается до уровня клавиатуры? - PullRequest
1 голос
/ 25 июня 2019

Я знаю, что существует автоматическая прокрутка, когда содержимое (текст) превышает высоту по умолчанию для текстового представления, но я хочу, чтобы текстовое представление было полноэкранным, и когда содержимое выходит на уровень клавиатуры, текстовое представление должно прокручиваться автоматически. Я дал GIF, чтобы помочь читателям лучше понять.

Примечания по IOS

class StartStoryPopUp: UIViewController, UITextViewDelegate {
    // Setup text view
    func setupTextView() {

        textViewOne.textColor = .black
        textViewOne.backgroundColor = baseColor
        // Add some padding to the text insde the text view
        textViewOne.textContainerInset = UIEdgeInsets(top: 15, left: 10, bottom: 15, right: 10)
        textViewOne.font = UIFont(name: "PatrickHand-Regular", size: 25)
        textViewOne.layer.cornerRadius = 25

        popUp.addSubview(textViewOne)
        addTextViewConstraints()
    }

    // Add the constraints to the 'start story' text view
    func addTextViewConstraints() {

        textViewOne.translatesAutoresizingMaskIntoConstraints = false
        textViewOne.leadingAnchor.constraint(equalTo: popUp.leadingAnchor, constant: 3).isActive = true
        textViewOne.trailingAnchor.constraint(equalTo: popUp.trailingAnchor, constant: -3).isActive = true
        textViewOne.topAnchor.constraint(equalTo: popUp.topAnchor, constant: 3).isActive = true
        textViewOne.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -30).isActive = true
    }
}

1 Ответ

5 голосов
/ 25 июня 2019

Swift 5

Может быть, эти строки будут работать для вас.

Вы должны установить contentOffSet в textViewDidChange функцию с анимацией, подобной этой:

func textViewDidChange(_ textView: UITextView) {

    let line = textView.caretRect(for: (textView.selectedTextRange?.start)!)
    let overFlow = line.origin.y + line.size.height - (textView.contentOffset.y + textView.bounds.size.height - textView.contentInset.bottom - textView.contentInset.top)

    if 0 < overFlow {

        var offSet = textView.contentOffset
        offSet.y += (overFlow + 7)

        UIView.animate(withDuration: 0.3, animations: {
            textView.setContentOffset(offSet, animated: true)
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...