2014-06-27 19 views
5

Im utilizzando Xcode 5.1.1 in sviluppo per ios7. Dato che c'è un nuovo testo che entra in UITextView, mi piacerebbe se il testo salisse, lasciando spazio all'utente per vedere il nuovo testo. Ho qualcosa che funziona, ma l'animazione che mostra il nuovo testo è scomoda. È quasi come se andasse dalla parte più alta del testo e andasse rapidamente verso il basso ogni volta che veniva chiamato.Smooth UITextView scorrimento automatico fino alla fine del fotogramma

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

Questo codice è sempre chiamato ogni volta che il nuovo testo viene inserito. Mi piacerebbe che fosse agevole come il messenger predefinito di iPhone, in cui si apre con disinvoltura.

+2

penso ° Il modo migliore per rispondere alle tue domande è separare la tua risposta dalla domanda nel modulo _La tua risposta_. Quindi accetta la tua risposta. E ti fa anche punti! – Jeff

risposta

10

La risposta giusta è quella di impostare:

_consoleView.layoutManager.allowsNonContiguousLayout = NO; 

In viewDidLoad

Poi:

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

grazie - l'unica risposta che funziona senza intoppi nello stack overflow. –

+0

Swift 3 'self.yourTextField.scrollRangeToVisible (NSMakeRange (self.yourTextField.text.count - 1,0))' dovrebbe funzionare correttamente – efwjames

3

(risposto con una modifica in questione Convertito in una risposta della comunità wiki Vedere Question with no answers, but issue solved in the comments (or extended in chat)..)

Il PO ha scritto:

Soluzione: Il problema era che quando il testo è stato sempre inserito nel texview esso Scorri verso l'alto quindi chiama scrollRangeToVisible che lo fa scorrere verso il basso, il che ha dato una brutta animazione e un'esperienza utente spiacevole. Ho risolto questo disabilitando rotolo prima del testo entra, e attivato dopo il testo è stato immesso in modo che le chiamate solo la scrollRangeToVisible

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

Questo non ha funzionato per me. – bedouger

Problemi correlati