Я не мог автоматически прокручивать свой textview

#ios #swift #xcode

#iOS #swift #xcode — код #xcode

Вопрос:

привет, у меня есть расширение в следующем коде, но оно не может быть запущено для меня: (

На самом деле я хочу прокрутить свой TextView с введенной скоростью, но я не знаю, как я могу это сделать

     extension UITextView {
    func simple_scrollToBottom() {
        let textCount: Int = text.count
        guard textCount >= 1 else { return }
        scrollRangeToVisible(NSRange(location: textCount - 1, length: 1))
    }
}
  

Я использовал его как self.akor_goster.simple_scrollToBottom() в viewdidload

Ответ №1:

Во-первых, вы бы не хотели вызывать это из viewDidLoad()

  • На этом этапе автоматическая компоновка еще не закончила упорядочивать все в представлении, содержимое фрейма и текстового представления еще не готово.
  • Кроме того, вы еще не хотите запускать анимацию, потому что представление еще не появилось.

Итак, если вы хотите, чтобы это произошло автоматически, введите вызов viewDidAppear() .

Во-вторых, вы не можете контролировать скорость прокрутки при вызове scrollRangeToVisible() , но вы можете рассчитать смещение и анимировать это изменение с желаемой скоростью.

Попробуйте это расширение:

 extension UITextView {
    func timedScrollToBottom(duration d: Double) {
        let y = contentSize.height - frame.size.height
        // if y is less than zero, all the text fits, so no scrolling needed
        guard y > 0 else {
            return
        }
        // Duration is in seconds
        UIView.animate(withDuration: d, animations: {
            self.contentOffset.y = y
        })
    }
}
  

и назовите это так:

 override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.akor_goster.timedScrollToBottom(duration: 2.0)
}
  

Комментарии:

1. спасибо за ваш ответ, использование animate — лучший способ, как вы сказали 🙂