Текст в 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)
}