UITextView startet Unten oder in der Mitte des Textes
Werde ich gleich zur Sache. Ich habe eine UItextView
platziert in meiner Ansicht, dass, wenn Sie braucht, um zu scrollen um den ganzen text sehen (wenn viel text vorhanden ist, in die textView) die textView beginnt in der Mitte der text und manchmal am unteren Rand des Textes zu anderen Zeiten.
Bearbeitung ist nicht aktiviert, auf die textView. Ich brauche einen Weg zu zwingen, den textView zu beginnen, jedes mal. Ich sah einige Fragen, die etwas wie diese, in denen andere Menschen eine " Inhalts-offset, aber ich weiß nicht wirklich wie das funktioniert oder ob es auch hier anwendbar.
Vielen Dank für Ihre Hilfe.
- Sind Sie mit UINavigationBar als überschrift über es oder seine eigene Ansicht?
- Ich bin mir nicht sicher, was du meinst, aber du fragst nach der Farbe, es ist eine normale navigationbar von einem push segue, nur farbig in der appdelegate.
- sind Sie auf der Einstellung wird der text in viewDidLoad? tun dispatch_async auf der main queue wird das problem lösen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass hat den trick für mich!
Ziel C:
Swift:
Swift 2 (Alternative Lösung)
Fügen Sie diese Methode überschreiben, um Ihre ViewController
Swift 3 & 4 (syntax Bearbeiten)
scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO
funktioniert besser, als es vermeidet eine erste Darstellung, verursacht durch die implizite animation.Alle der oben genannten Antworten nicht für mich arbeiten. Jedoch, das Geheimnis entpuppt sich für die Implementierung Ihrer Lösung innerhalb einer Außerkraftsetzung von viewDidLayoutSubviews, in:
HTH 🙂
viewDidLayoutSubviews()
und ich sah das textView-scrolling-etwa, wenn der ViewController geladen, trotz animation auf false gesetzt. Ich habe es behoben, indemsetContentOffset
imviewWillAppear
w/ animation auf false gesetzt.In Swift 2
Können Sie diese verwenden, um die textView start von oben:
Bestätigt arbeiten in Xcode 7.2 Swift 2
Versuchen, diese unter code -
Oder Sie können auch setzen Sie diese Eigenschaft von StoryBoard -
Wählen Sie ViewController und wählen Sie dann Attribute Inspektor jetzt deaktiviert
Adjust Scroll View Insets
.Für Swift >2.2, ich hatte Probleme mit iOS 8 und iOS 9 unter Verwendung der obigen Methoden, gibt es keine einfache Antwort, dass funktioniert so, hier ist was ich getan habe, damit es funktioniert für beide.
Aktualisieren Sie Ihre UINavigationBar ist
translucent
EigenschaftNO
:Wird dieses Update die Ansicht von umrahmt wird unterhalb der navigation bar und Statusleiste.
Wenn Sie zum ein-und ausblenden der Navigationsleiste, dann verwenden Sie folgenden code in Ihre
viewDidLoad
Hoffe, das hilft.
Mit einer Menge von Tests, fand ich hinzufügen muss unten in viewWillLayoutSubviews () - Funktion um sicherzustellen, dass die UITextView zeigen, von Anfang an:
UITextView
scrollen scheint ein problem für viele Menschen. Das sammeln von den Antworten, die hier um (vor allem diese) und in der Entwicklerdokumentation von Apple, mit einigen meiner eigenen Witz, hier ist eine Lösung, die funktioniert für mich. Sie können den code ändern, um Ihre Bedürfnisse anzupassen.Mein Anwendungsfall ist wie folgt: das gleiche
UITextView
wird für verschiedene Zwecke verwendet, die Anzeige von verschiedenen Inhalten in verschiedenen Situationen. Was ich möchte ist, dass, wenn sich der Inhalt ändert, die alte scroll-position wieder hergestellt wird, oder zu Zeiten, scrollen bis zum Ende. Ich will nicht zu viel animation, wenn dies geschieht. Vor allem möchte ich nicht die Ansicht zu animieren, wie alle der text war neu. Diese Lösung stellt die alte scroll-position, ohne animation, dann scrollt an das Ende animiert, wenn es so gewünscht wird.Was Sie tun müssen (oder sollte ich sagen kann tun) zu erweitern, um UITextView wie folgt:
Was dieser tut, ist es aktualisiert den text, dann verwendet einen gespeicherten Wert von der
UITextView.contentOffset
Eigenschaft (oder alles, was Sie als parameter übergeben), und legt den offset der Ansicht entsprechend. Wenn gewünscht, nach diesem, es scrollt an das Ende des neuen, potentiell geänderten Inhalte.Ich bin neu in der iOS-Programmierung und ich weiß nicht, warum es funktioniert so gut es tut, wenn jemand einige Informationen über diese, es wäre schön zu wissen. Auch der Ansatz ist vielleicht nicht perfekt, so bin ich offen für Verbesserungsvorschläge sowie.
Und natürlich danke an NixonsBack für das posten der Antwort hinter dem link oben.
Mein Erster post 🙂 prost!
Xcode 7.2 7c68; IOS 9.1
Meine
ViewController
enthältUITextView
ist kompliziert, und einiges geändert, während der Projektlaufzeit (IDE-version geändert, vielleicht 2~3 mal zu).Ich habe versucht, alle oben genannten Lösungen, wenn Sie das gleiche Problem begegnen, werden PATIENTEN.
Gibt es drei mögliche 'secret codes' zu lösen:
textView.scrollEnabled = false
//then set text
textView.scrollEnabled = true
textView.scrollRangeToVisible(NSMakeRange(0, 0))
textView.setContentOffset(CGPointZero, animated: false)
Und es gibt zwei Orte, können Sie diese codes, in:
viewDidLoad()
viewDidLayoutSubviews()
Kombinieren, erhalten Sie 3*2=6 Lösungen, die richtige Kombination hängt davon ab, wie kompliziert Sie
ViewController
ist (Glauben Sie mir, nach dem löschen nur einen Blick übertextView
, ich muss zu finden eine neue Kombination).Und ich fand, dass:
Wenn Sie 'secret codes' in
viewDidLayoutSubviews()
, abertextView.text = someStrings
imviewDidLoad()
der InhalttextView
wird 'schütteln' manchmal. Also, legen Sie an der gleichen Stelle.Letzte Wort: versuchen ALLE Kombinationen, das ist, wie ich dieses Problem lösen dummen Fehler mehr als dreimal während der zwei Monate.
Setzen diese eine Zeile code in ViewDidLoad
Sollte der folgende code geben Sie Effekt, den Sie möchten.
Wirst du ersetzen müssen "selbst.scrollView" mit dem Namen des scroll-Ansicht. Sie sollten diesen code in nach Sie habe den text des scroll-Ansicht.
[self.scrollView setContentOffset:CGPointMake(0, -self.scrollView.contentInset.top) animated:YES];
an mehreren stellen: nach dem, wo ich den code programmgesteuert in die Kommentarzeichen vor der viewDidLoad, und in der viewWillAppear, aber kein Glück. Ich dachte, es hatte etwas zu tun mit meiner navigation bar?Dieser arbeitete für mich:
Dieser arbeitete für mich mit Xcode 8.3.3:
Erstellen Sie ein Ventil für Ihre
UITextView
imViewController.swift
- Datei. In derViewDidLoad
Abschnitt legen Sie die folgenden:Swift:
Habe ich versucht:
Übersetzte ich zeeple Antwort auf MonoTouch/Xamarin (C#).
Hatte ich die Implementierung von zwei Antworten hier, um meine Ansicht zu arbeiten, wie ich will:
Vom Juan David Serrano Cruz:
Und von Murat Yasar:
Dies gab einen UITextView, dass die Lasten mit den Blättern an der Spitze und wo die Abstände nicht geändert werden, sobald das scrollen beginnt. Sehr seltsam, dass dies nicht das Standardverhalten ist.
Swift 4.2
:Objective-C
:Swift 4.2 & Swift 5
set Inhalt offset-sowohl vor als auch nach der Einstellung der text. (auf dem Haupt-Thread)
In meinem Fall war ich das laden einer textView in eine Benutzerdefinierte tableview cell. Unten ist das, was ich Tat, um sicherzustellen, dass der text in einem textview-Lasten an den oberen Rand des Textes in meiner textview in meine eigene Zelle.
1.) Im storyboard festgelegt, die textview ScrollEnabled = false, indem Sie die-Taste.
2.) Legen Sie die isScrollEnabled auf true textview nach dem anzeigen geladen. Ich meine in einer kleinen Verspätung wie folgt:
Unabhängig, wenn Sie in meiner situation oder nicht, versuchen Sie, scrollEnabled auf false und dann, wenn die Ansicht geladen, legen Sie scrollEnabled zu wahren.