2010-07-03 15 views
15

Prima usavo questo metodo ....iOS4: Non è possibile a livello di programmazione Scorrere fino alla parte inferiore della UITextView

//TextView is a UITextView 

[TextView scrollRangeToVisible:NSMakeRange([TextView length], 0)]; 

... che a livello di codice scorrere fino alla fine della UITextView, ma non sembra lavorare su iOS 4.0. Esiste un modo per scorrere a livello di codice fino alla fine di un UITextView senza modificare la possibilità di modifica o inserire un punto (in cui l'utente può toccare UITextView e visualizzare una tastiera)?

Inoltre, è necessario assegnare il proprietario del file come delegato? Fa la differenza?

+0

Cosa si intende per "non funziona". Scorre a tutti? La tastiera viene evocata? – TechZen

+0

Quando si utilizza [TextView scrollRangeToVisible: NSMakeRange ([TextView.text length], 0)]; Non scorre affatto, ma non cambia l'editable della vista testo (che è un bene per me). un progetto di esempio che dimostra questo è al http://dl.dropbox.com/u/8256776/Bugsy.zip si tratta di un modello con un ViewController UITextView e due pulsanti. quando si preme un pulsante, aggiunge "\ nFive" a UITextView e tenta di scorrere fino alla fine (senza successo). quando viene premuto l'altro pulsante, aggiunge "\ nSix" a UITextView e tenta di scorrere fino alla fine (senza successo). – OscarTheGrouch

+0

cosa intendi con invano? Stai testando questo sul simulatore? Vedo il textview scorrere verso il basso ... Se lo scorrimento verso l'alto, quando premo cinque o sei scorre verso il basso. Funziona perfettamente. – SpaceDog

risposta

37

UITextView non ha la proprietà length. Il seguente codice funziona bene per il mio ambiente.

[TextView scrollRangeToVisible:NSMakeRange([TextView.text length], 0)]; 
6

La risposta non ha funzionato per me, ma a seguito di quello che si potrebbe utilizzare per un TableView funziona perfettamente. Assicurati che UITextView sia denominato textView.

if (textView.contentSize.height > textView.frame.size.height) 
{ 
    CGPoint offset = CGPointMake(0, textView.contentSize.height - textView.frame.size.height); 
    [self.textView setContentOffset:offset animated:YES]; 
} 
+1

Sì! Funziona perfettamente (e ho provato tutti i tipi di variazioni di scrollRangeToVisible nella mia app!) – iPhoneDollaraire

+0

Sembrava funzionare meglio dell'altra risposta accettata! Grazie – Rambatino

0

Questo è quello che uso funziona bene. Il shouldScrollTextToBottom viene impostato dalla vista chiamante (1 visita regolatore inferiore nella pila chiamante)

(void)viewDidAppear:(BOOL)animated 
{ // scroll to bottom if required 
    if(shouldScrollTextToBottom) 
    [txtMyTextView scrollRectToVisible:CGRectMake(0, 0, txtMyTextView.frame.size.width, txtMyTextView.frame.size.height * 6) animated:YES]; 
} 

6 è un numero arbitrariamente grande che dovrebbe essere un multiplo dell'altezza del UITextView. Ho trovato che con un valore di 5, la mia vista non scorre verso il basso assoluto.

4

In IOS8, una chiamata a ensureLayoutForTextContainer sembra rendere questa soluzione funzionante .. Ci sono voluti quasi un'ora per rintracciarlo.

logObject.layoutManager.ensureLayoutForTextContainer(logObject.textContainer) 

    logObject.setContentOffset(CGPointMake(0.0, logObject.contentSize.height), animated:false) 
1

questo ha funzionato per me:

[_myTextView.layoutManager ensureLayoutForTextContainer:_myTextView.textContainer]; 
[_myTextView scrollRangeToVisible:NSMakeRange([_myTextView.text length], 0)]; 
Problemi correlati