Frage Wie erzwinge ich, dass ein UITextView jedes Mal nach oben scrollt, wenn ich den Text ändere?


OK, ich habe ein Problem mit dem UITextView. Hier ist das Problem:

Ich füge etwas Text zu einem hinzu UITextView. Der Benutzer klickt dann doppelt, um etwas auszuwählen. Ich ändere dann den Text in der UITextView (programmatisch wie oben) und der UITextView  Scrollt zum unteren Ende der Seite, auf der sich ein Cursor befindet.

Dies ist jedoch NICHT, wo der Benutzer geklickt hat. Es scrollt IMMER zum unteren Rand des UITextView unabhängig davon, wo der Benutzer geklickt hat.

Also hier ist meine Frage: Wie zwinge ich das? UITextView um jedes Mal nach oben zu scrollen, wenn ich den Text ändere? ich habe es versucht contentOffset und scrollRangeToVisible. Keine Arbeit.

Irgendwelche Vorschläge würden geschätzt werden.


75
2017-08-05 16:12


Ursprung


Antworten:


UITextView*note;
[note setContentOffset:CGPointZero animated:YES];

Das macht es für mich.

Swift-Version (Swift 4.1 mit iOS 11 auf Xcode 9.3):

note.setContentOffset(.zero, animated: true)

121
2018-04-01 03:02



Wenn jemand dieses Problem in iOS 8 hat, habe ich festgestellt, dass nur die Einstellung UITextView's Text-Eigenschaft, dann aufrufen scrollRangeToVisible mit einem NSRange mit location:0, length:0, hat funktioniert. Meine Textansicht war nicht editierbar, und ich habe sowohl auswählbar als auch nicht auswählbar getestet (keine Einstellung hat das Ergebnis beeinflusst). Hier ist ein schnelles Beispiel:

myTextView.text = "Text that is long enough to scroll"
myTextView.scrollRangeToVisible(NSRange(location:0, length:0))

61
2018-03-02 01:19



Und hier ist meine Lösung ...

    override func viewDidLoad() {
        textView.scrollEnabled = false
        textView.text = "your text"
    }

    override func viewDidAppear(animated: Bool) {
        textView.scrollEnabled = true
    }

37
2017-07-23 21:13



Berufung

scrollRangeToVisible(NSMakeRange(0, 0))

funktioniert, aber rufen Sie es an

override func viewDidAppear(animated: Bool)

32
2018-05-13 09:33



Ich verwendete attributedString in HTML mit Textansicht nicht editierbar. Das Einstellen der Inhaltskorrektur funktionierte auch nicht für mich. Das funktionierte für mich: Deaktivieren Sie Scroll aktiviert, setzen Sie den Text und aktivieren Sie das Scrollen erneut

[yourTextView setScrollEnabled:NO];
yourTextView.text = yourtext;
[yourTextView setScrollEnabled:YES];

26
2017-10-16 00:06



Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, aber versuchen Sie einfach, die Ansicht nach oben zu scrollen? Wenn ja, solltest du tun

[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];


16
2017-08-06 19:08



Da keine dieser Lösungen für mich funktionierte und ich viel zu viel Zeit damit verschwendete, Lösungen zusammen zu stellen, löste das letztendlich für mich.

override func viewWillAppear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(), {
        let desiredOffset = CGPoint(x: 0, y: -self.textView.contentInset.top)
        self.textView.setContentOffset(desiredOffset, animated: false)
    })
}

Das ist wirklich albern, dass dies kein Standardverhalten für dieses Steuerelement ist.

Ich hoffe, dass dies jemand anderem hilft.


15
2018-01-18 22:15



Für iOS 10 und Swift 3 habe ich:

override func viewDidLoad() {
    super.viewDidLoad()
    textview.isScrollEnabled = false
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    textView.isScrollEnabled = true
}

Arbeitete für mich, nicht sicher, ob Sie das Problem mit der neuesten Version von Swift und iOS haben.


9
2017-11-01 17:12