Текст в UITextView Auto-Scrolled to Bottom
У меня есть то, что я считаю стандартным UITextView в ViewController, у которого есть значительное количество текста, достаточно, чтобы не все это могло поместиться на экране. Мне бы хотелось, чтобы при загрузке этого представления пользователь мог начать чтение в верхней части текста, а затем прокручивать страницу по мере продвижения по тексту. Имеет смысл, не так ли? То, что я хочу, не нереально.
Проблема заключается в том, что при загрузке представления текст в UITextView уже прокручивается до конца. Я просмотрел SO, и есть несколько подобных сообщений, но ни одно из решений в нем не разрешает мою проблему. Вот код в контроллере просмотра:
import UIKit
class WelcomeTextVC: UIViewController {
var textString: String = ""
@IBOutlet weak var welcomeText: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.translucent = false
self.welcomeText.text = textString
self.welcomeText.scrollRangeToVisible(NSMakeRange(0, 0))
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
self.welcomeText.scrollRangeToVisible(NSMakeRange(0, 0))
welcomeText.setContentOffset(CGPointMake(0, -self.welcomeText.contentInset.top), animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Я пробовал большинство стандартных решений безрезультатно. Одно общее предложение, которое я не пробовал, - "Снять флажки" Настроить прокрутку "в Инспекторе атрибутов". Причина, по которой я не пробовал, состоит в том, что я не могу установить этот флажок.
Что мне нужно сделать, чтобы текст начинался с вершины?
Ответы
Ответ 1
Вот несколько способов, о которых я знаю. Оба способа реализуются программно с помощью метода viewDidLayoutSubviews()
в вашем контроллере вида. После вызова super.viewDidLayoutSubviews()
вы можете добавить:
myTextView.scrollRangeToVisible(NSMakeRange(0, 1))
Это автоматически прокрутит textView до первого символа в textView. Это может привести к нежелательной анимации, когда появится представление. Второй способ - добавить:
myTextView.setContentOffset(CGPoint.zero, animated: false)
Это прокручивает UITextView до нуля (начало) и дает вам контроль над тем, хотите ли вы его анимировать или нет.
Ответ 2
Обновлено для Swift 3
Чтобы использовать решение Aaron в Swift 3:
override func viewDidLayoutSubviews() {
myTextView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
}