2014-06-27 6 views
5

Korzystam z Xcode 5.1.1 dla ios7. Ponieważ jest nowy tekst wprowadzany do UITextView, chciałbym, aby tekst się podniósł, pozostawiając miejsce dla użytkownika, aby zobaczyć nowy tekst. Mam coś, co działa, ale animacja pokazująca nowy tekst jest niezręczna. To prawie tak, jakby pochodziło z samej góry tekstu i szybko przechodzi na sam dół za każdym razem, gdy jest wywoływane.Gładkie UITextView automatyczne przewijanie do dolnej krawędzi ramki

CGPoint p = [textview contentOffset]; [textview setContentOffset:p animated:NO]; [textview scrollRangeToVisible:NSMakeRange([textview.text length] - 1,0)];

Ten kod jest uzyskiwanie wywoływana za każdym razem nowy tekst zostanie wprowadzony. Chciałbym, żeby był tak gładki jak domyślny messenger iPhone'a, gdzie po prostu ślizga się niedbale.

+2

myślę th Preferowanym sposobem odpowiedzi na własne pytania jest odseparowanie odpowiedzi od pytania w formularzu "Twoja odpowiedź". Następnie zaakceptuj własną odpowiedź. A także dostaje punkty! – Jeff

Odpowiedz

10

Odpowiedź RIGHT jest ustawienie:

_consoleView.layoutManager.allowsNonContiguousLayout = NO; 

W viewDidLoad

Następnie:

_consoleView.text = text; 
[_consoleView scrollRangeToVisible:NSMakeRange(_consoleView.text.length - 1, 1)]; 
+0

dziękuję - jedyna odpowiedź, która działa sprawnie w przepełnieniu stosu. –

+0

Swift 3 'self.yourTextField.scrollRangeToVisible (NSMakeRange (self.yourTextField.text.count - 1,0))' powinien działać dobrze – efwjames

3

(odpowiedź od edit zapytania przerobiony na odpowiedź Wiki Zobacz Question with no answers, but issue solved in the comments (or extended in chat).).

PO napisał:

Rozwiązanie: Problem polegał na tym, że gdy tekst był już wstawiony do texview to przewijany do góry, a następnie zwany scrollRangeToVisible, który przewinął go na sam dół, co dało złą animację i nieprzyjemne wrażenia użytkownika. Rozwiązałem to przez wyłączenie zwój przed wejściem tekstu i pozwoliło po tekst został wprowadzony tak tylko nazywa scrollRangeToVisible

[textview scrollRangeToVisible:textview.selectedRange]; 
textview.scrollEnabled= NO; 
textview.text = [textview.text stringByAppendingString:createdString]; 
textview.scrollEnabled= YES; 
+0

To nie działa dla mnie. – bedouger

Powiązane problemy