2015-10-31 18 views
10

Mam to, co uważam za standardowy UITextView w ViewController, który zawiera znaczną ilość tekstu, na tyle, że nie wszystkie mogą zmieścić się na ekranie. Chciałbym, aby po załadowaniu tego widoku użytkownik mógł zacząć czytać u góry tekstu, a następnie przewijać stronę w miarę postępu w tekście. Ma sens, prawda? To, czego chcę, nie jest nierealistyczne.Tekst w UITextView Auto-Scrolled to Bottom

Problem polega na tym, że po załadowaniu widoku tekst w UITextView jest już przewinięty do samego dołu. Przeszukałem SO i istnieje wiele podobnych postów, ale żadne z tych rozwiązań nie rozwiązuje mojego problemu. Oto kod w tym widoku kontrolera:

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. 
    } 

} 

Próbowałem większość standardowych rozwiązań bezskutecznie. Jedną z powszechnych sugestii, których nie próbowałem, jest "Usunięcie zaznaczenia Dostosuj widok widoków w Inspektorze atrybutów". Powodem, dla którego go nie wypróbowałem, jest to, że nie mogę zlokalizować tego legendarnego pola wyboru.

Co muszę zrobić, aby tekst był wyrównany do początku?

+0

Ten sam problem jest ze mną dzieje. Nie wiem, dlaczego tak się dzieje, ale to jest denerwujące. Czasami czuję, że Apple daje więcej kłopotów swoim programistom. Wypróbowałem wszystkie rozwiązania dostarczone na to pytanie, ale żadna z nich nie zadziałała. Używanie Xcode9.1 (Swift). –

+0

I skończyło się na dodaniu etykiety w widoku przewijania. i czułem się z tym bardzo źle :) –

Odpowiedz

18

Istnieje kilka sposobów, które znam. Oba sposoby są implementowane programowo za pomocą metody viewDidLayoutSubviews() w kontrolerze widoku. Po wywołaniu super.viewDidLayoutSubviews(), można dodać:

myTextView.scrollRangeToVisible(NSMakeRange(0, 1)) 

To automatycznie przewijać TextView do pierwszego znaku w TextView. To jednak może dodać niechcianą animację, gdy pojawi się widok. Drugim sposobem byłoby dodając:

myTextView.setContentOffset(CGPoint.zero, animated: false) 

ten przewija UITextView do punktu zerowego (początek) i daje kontrolę nad tym, czy chcesz to animowane, czy nie.

+0

To była absolutna odpowiedź. Dzięki! – zeeple

+1

Mam podobny problem, ale gdy dodaję to, możliwość przewijania jest tracona z TextView .. jakieś pomysły? – Prateek

6

Aktualizacja dla Swift 3

w użyciu rozwiązanie Aarona w Swift 3:

override func viewDidLayoutSubviews() { 
    myTextView.setContentOffset(CGPoint(x: 0, y: 0), animated: false) 
} 
Powiązane problemy