OK, ich habe ein Problem mit dem UITextView
. Hier ist das Problem:
Ich füge einen Text zu a hinzu UITextView
. Der Benutzer doppelklickt dann, um etwas auszuwählen. Ich ändere dann den Text im UITextView
(programmgesteuert wie oben) und UITextView
scrolle zum Ende der Seite, wo sich ein Cursor befindet.
Hier hat der Benutzer jedoch NICHT geklickt. Es wird IMMER nach unten gescrollt, UITextView
unabhängig davon, wo der Benutzer geklickt hat.
Hier ist meine Frage: Wie zwinge ich das UITextView
, jedes Mal, wenn ich den Text ändere, nach oben zu scrollen? Ich habe es versucht contentOffset
und scrollRangeToVisible
. Weder Arbeit.
Anregungen wäre dankbar.
iphone
ios
uitextview
Sam Stewart
quelle
quelle
viewDidAppear()
.Wenn jemand dieses Problem in iOS 8 hat, fand ich , dass nur die Einstellung
UITextView's
Texteigenschaft, dann ruftscrollRangeToVisible
mit einemNSRange
mitlocation:0
,length:0
arbeitete. Meine Textansicht konnte nicht bearbeitet werden, und ich habe sowohl auswählbar als auch nicht auswählbar getestet (keine der Einstellungen hat das Ergebnis beeinflusst). Hier ist ein schnelles Beispiel:quelle
Und hier ist meine Lösung ...
quelle
Berufung
funktioniert aber ruf es an
quelle
Ich habe attributedString in HTML verwendet, wobei die Textansicht nicht bearbeitet werden konnte. Das Einstellen des Inhaltsversatzes hat auch bei mir nicht funktioniert. Dies funktionierte bei mir: Deaktivieren Sie das Scrollen, setzen Sie den Text und aktivieren Sie das Scrollen erneut
quelle
viewDidAppear
Da keine dieser Lösungen für mich funktionierte und ich viel zu viel Zeit damit verschwendete, Lösungen zusammenzusetzen, löste dies schließlich für mich.
Das ist wirklich albern, dass dies kein Standardverhalten für dieses Steuerelement ist.
Ich hoffe das hilft jemand anderem.
quelle
self.textView.contentOffset.y
basierend auf dieser Antwort: stackoverflow.com/a/25366126/1736679Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, aber versuchen Sie einfach, die Ansicht nach oben zu scrollen? Wenn ja, sollten Sie tun
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
quelle
Für iOS 10 und Swift 3 habe ich:
Arbeitete für mich, nicht sicher, ob Sie das Problem mit der neuesten Version von Swift und iOS haben.
quelle
Ich habe eine aktualisierte Antwort, bei der die Textansicht ordnungsgemäß angezeigt wird und der Benutzer keine Bildlaufanimation erhält.
quelle
So funktionierte es unter iOS 9 Release, sodass die Textansicht oben gescrollt wird, bevor sie auf dem Bildschirm angezeigt wird
quelle
So habe ich es gemacht
Swift 4:
quelle
Das hat bei mir funktioniert
quelle
DispatchQueue.main.async(...
nicht erforderlich, aber aus irgendeinem Grund funktioniert er auf (z. B.) iPhone 5s (iOS 12.1) nur, wenn Sie ihn versenden. Aber wie vom Aufrufstapel im Debugger gemeldet,viewWillAppear()
läuft in allen Fällen bereits in der Hauptwarteschlange ... - WTF, Apple ???Versuchen Sie dies, um den Cursor an den Anfang des Textes zu bewegen.
Sehen Sie, wie das geht. Stellen Sie sicher, dass Sie dies anrufen, nachdem alle Ihre Ereignisse ausgelöst wurden oder was auch immer Sie tun.
quelle
Mein Problem besteht darin, textView so einzustellen, dass es beim Erscheinen der Ansicht nach oben scrollt. Für iOS 10.3.2 und Swift 3.
Lösung 1:
Lösung 2:
quelle
Kombiniert die vorherigen Antworten, jetzt sollte es funktionieren:
quelle
scrollRangeToVisible
.Diese Codezeile funktioniert für mich.
quelle
Nur Sie können diesen Code verwenden
quelle
Swift 2 Antwort:
Dadurch wird verhindert, dass die Textansicht nach dem Festlegen zum Ende des Texts scrollt.
quelle
In Swift 3:
viewWillLayoutSubviews ist der Ort, an dem Änderungen vorgenommen werden können. viewWillAppear sollte ebenfalls funktionieren, aber logischerweise sollte das Layout in viewWillLayoutSubviews ausgeführt werden .
In Bezug auf Methoden funktionieren sowohl scrollRangeToVisible als auch setContentOffset . Mit setContentOffset kann die Animation jedoch ein- oder ausgeschaltet werden.
Angenommen, die UITextView heißt yourUITextView . Hier ist der Code:
quelle
Ich musste die folgenden in viewDidLayoutSubviews aufrufen (das Aufrufen in viewDidLoad war zu früh):
quelle
Das hat bei mir funktioniert. Es basiert auf der Antwort von RyanTCB, ist jedoch die Objective-C-Variante derselben Lösung:
quelle
quelle
ViewWillappear
wird es sofort tun, bevor der Benutzer es bemerken kann, aberViewDidDisappear
Abschnitt wird es träge animieren.[mytextView setContentOffset:CGPointZero animated:YES];
funktioniert manchmal NICHT (ich weiß nicht warum), also benutze lieber scrollrangetovisible.quelle
Problem gelöst: iOS = 10.2 Swift 3 UITextView
Ich habe gerade die folgende Zeile verwendet:
quelle
viewDidLayoutSubviews
damit es passiert, wenn sich der Bildschirm dreht. Andernfalls wird der Inhaltsoffset falsch ausgerichtet.quelle
Ich hatte das Problem, aber in meinem Fall ist die Textansicht die Unteransicht einer benutzerdefinierten Ansicht und wurde zu ViewController hinzugefügt. Keine der Lösungen hat bei mir funktioniert. Um das Problem zu lösen, wurde eine Verzögerung von 0,1 Sekunden hinzugefügt und dann das Scrollen aktiviert. Es hat bei mir funktioniert.
quelle
Für mich funktioniert dieser Code gut:
Um zur exakten Position zu scrollen und sie oben auf dem Bildschirm anzuzeigen, verwende ich diesen Code:
Wenn Sie contentOffset.y festlegen, wird ein Bildlauf zum Ende des Texts durchgeführt, und scrollRangeToVisible führt einen Bildlauf bis zum Wert von scrollToLocation durch. Dabei erscheint die benötigte Position in der ersten Zeile von scrollView.
quelle
In iOS 9 funktionierte es für mich nicht mehr mit einer zugewiesenen Zeichenfolge mit der Methode scrollRangeToVisible (die erste Zeile war fett gedruckt, die anderen Zeilen waren normal geschrieben).
Also musste ich verwenden:
wo Verzögerung ist:
quelle
Versuchen Sie, diese 2-Zeilen-Lösung zu verwenden:
quelle
Hier sind meine Codes. Es funktioniert gut.
quelle