#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 — лучший способ, как вы сказали 🙂