2010-07-03 11 views
15

Antes de que yo estaba usando este método ....iOS4: No se puede desplazar mediante programación a la parte inferior de UITextView

//TextView is a UITextView 

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

... que mediante programación desplazarse hasta el final de la UITextView pero no parece estar trabajando en iOS 4.0. ¿Hay alguna manera de desplazarse programáticamente al final de una UITextView sin cambiar la editabilidad o insertar un punto (donde el usuario puede tocar el UITextView y mostrar el teclado)?

Además, ¿necesito asignar el propietario del archivo como delegado? ¿Hace alguna diferencia?

+0

¿Qué quiere decir por "no trabajar". ¿Se desplaza en absoluto? ¿Se evoca el teclado? – TechZen

+0

Al usar [TextView scrollRangeToVisible: NSMakeRange ([TextView.text length], 0)]; No se desplaza en absoluto, pero no cambia el .editable de la vista de texto (que es bueno para mí). un proyecto de ejemplo que demuestra esto es a http://dl.dropbox.com/u/8256776/Bugsy.zip es una plantilla con un ViewController UITextView y dos botones. cuando se presiona un botón, agrega "\ nFive" al UITextView e intenta desplazarse hacia abajo hasta el final (sin éxito). cuando se presiona el otro botón agrega "\ nSix" al UITextView e intenta desplazarse hacia abajo hasta el final (sin éxito). – OscarTheGrouch

+0

¿a qué te refieres con sin éxito? ¿Estás probando esto en el simulador? Veo que la vista de texto se desplaza hacia abajo ... Si la deslizo hacia arriba, cuando presiono cinco o seis, se desplaza hacia abajo. Está funcionando perfectamente. – SpaceDog

Respuesta

37

UITextView no tiene propiedad de longitud. El siguiente código funciona bien para mi entorno.

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

La respuesta no funcionó para mí, pero siguiendo lo que usaría para un TableView funciona perfecto. Solo asegúrese de que su UITextView se llame 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í! Esto funciona perfectamente (¡y he intentado todo tipo de variaciones de scrollRangeToVisible en mi aplicación!) – iPhoneDollaraire

+0

¡Esto parecía funcionar mejor que la otra, la respuesta aceptada! Gracias – Rambatino

0

Esto es lo que uso funciona bien. El shouldScrollTextToBottom se establece por el punto de vista de llamada (controlador 1 vista inferior en la pila de llamadas)

(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 es un número arbitrariamente grande que debe ser un múltiplo de la altura de la UITextView. He encontrado que con un valor de 5, mi vista no se desplaza al fondo absoluto.

4

En IOS8, una llamada a ensureLayoutForTextContainer parece hacer que esta solución funcione ... Me llevó casi una hora rastrear esto.

logObject.layoutManager.ensureLayoutForTextContainer(logObject.textContainer) 

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

Esto funcionó para mí:

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