UITextView
Scrollen scheint für viele ein Problem zu sein. Aus den Antworten hier (insbesondere dieser ) und der Apple Developer-Dokumentation, die ich mit meinem eigenen Verstand verwende, ist hier eine Lösung, die für mich funktioniert. Sie können den Code an Ihre Bedürfnisse anpassen.
Mein Anwendungsfall lautet wie folgt: Dasselbe UITextView
wird für verschiedene Zwecke verwendet und zeigt unterschiedliche Inhalte unter verschiedenen Umständen an. Ich möchte, dass bei einer Änderung des Inhalts die alte Bildlaufposition wiederhergestellt oder manchmal bis zum Ende gescrollt wird. Ich möchte nicht zu viel Animation, wenn dies erledigt ist. Insbesondere möchte ich nicht, dass die Ansicht animiert wird, da der gesamte Text neu war. Diese Lösung stellt zuerst die alte Bildlaufposition ohne Animation wieder her und scrollt dann auf Wunsch bis zum animierten Ende.
Was Sie tun müssen (oder sollte ich sagen können ), ist UITextView wie folgt zu erweitern:
extension UITextView {
func setText(text: String, storedOffset: CGPoint, scrollToEnd: Bool) {
self.text = text
let delayInSeconds = 0.001
let popTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue(), {
self.setContentOffset(storedOffset, animated: false)
if scrollToEnd && !text.isEmpty {
let popTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue(), {
self.scrollRangeToVisible(NSMakeRange(text.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) - 1, 0))
})
}
})
}
}
Dadurch wird der Text aktualisiert, dann ein gespeicherter Wert der UITextView.contentOffset
Eigenschaft (oder alles, was Sie als Parameter übergeben) verwendet und der Versatz der Ansicht entsprechend festgelegt. Falls gewünscht, wird danach zum Ende des neuen, möglicherweise geänderten Inhalts gescrollt.
Ich bin neu in der iOS-Programmierung und weiß nicht, warum es so gut funktioniert. Wenn jemand Informationen dazu hat, wäre es schön zu wissen. Auch der Ansatz ist möglicherweise nicht perfekt, daher bin ich auch offen für Verbesserungsvorschläge.
Und natürlich danke an NixonsBack für die Antwort hinter dem obigen Link.
Mein erster Beitrag :), Prost!