De acuerdo, tengo un problema con el UITextView
. Aquí está el problema:
Agrego algo de texto a un UITextView
. Luego, el usuario hace doble clic para seleccionar algo. Luego cambio el texto en UITextView
(programáticamente como arriba) y los UITextView
desplazamientos hacia la parte inferior de la página donde hay un cursor.
Sin embargo, ahí NO es donde el usuario hizo clic. SIEMPRE se desplaza hasta la parte inferior del, UITextView
independientemente de dónde haya hecho clic el usuario.
Así que aquí está mi pregunta: ¿Cómo fuerzo el UITextView
desplazamiento hacia la parte superior cada vez que cambio el texto? Lo he intentado contentOffset
y scrollRangeToVisible
. Ninguno de los dos funciona.
Cualquier sugerencia sera apreciada.
fuente
viewDidAppear()
.Si alguien tiene este problema en iOS 8, me encontré con que sólo la creación de la
UITextView's
propiedad de texto, a continuación, llamarscrollRangeToVisible
con unNSRange
conlocation:0
,length:0
, trabajé. Mi vista de texto no era editable y probé tanto seleccionable como no seleccionable (ninguna configuración afectó el resultado). Aquí hay un ejemplo de Swift:fuente
Y aquí está mi solución ...
fuente
Vocación
funciona pero llámalo
fuente
Estaba usando attributeString en HTML con la vista de texto no editable. Establecer el desplazamiento de contenido tampoco funcionó para mí. Esto funcionó para mí: deshabilite el desplazamiento habilitado, configure el texto y luego habilite el desplazamiento nuevamente
fuente
viewDidAppear
como parte de una serie más amplia de correccionesComo ninguna de estas soluciones funcionó para mí y perdí demasiado tiempo juntando soluciones, esto finalmente me resolvió.
Es realmente una tontería que no sea el comportamiento predeterminado de este control.
Espero que esto ayude a alguien más.
fuente
self.textView.contentOffset.y
basado en esta respuesta: stackoverflow.com/a/25366126/1736679No estoy seguro de haber entendido su pregunta, pero ¿está intentando simplemente desplazar la vista hacia la parte superior? Si es así, deberías hacerlo
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
fuente
Para iOS 10 y Swift 3 lo hice:
Funcionó para mí, no estoy seguro de si tiene el problema con la última versión de Swift e iOS.
fuente
Tengo una respuesta actualizada que hará que la vista de texto aparezca correctamente y sin que el usuario experimente una animación de desplazamiento.
fuente
Así es como funcionó en iOS 9 Release, de modo que textView se desplaza en la parte superior antes de aparecer en la pantalla
fuente
Asi es como lo hice
Rápido 4:
fuente
Esto funcionó para mi
fuente
DispatchQueue.main.async(...
no es necesario completar la llamada , pero por alguna razón, en (por ejemplo) iPhone 5s (iOS 12.1) no funciona a menos que lo envíe. Pero según lo informado por la pila de llamadas en el depurador,viewWillAppear()
ya se está ejecutando en la cola principal en todos los casos ... - WTF, Apple ???Intente esto para mover el cursor a la parte superior del texto.
Mira cómo va eso. Asegúrese de llamar a esto después de que se hayan activado todos sus eventos o de lo que esté haciendo.
fuente
Mi problema es configurar textView para que se desplace hacia la parte superior cuando apareció la vista. Para iOS 10.3.2 y Swift 3.
Solución 1:
Solución 2:
fuente
Combinando las respuestas anteriores, ahora debería funcionar:
fuente
scrollRangeToVisible
embargo, pude eliminar .Esta línea de código me funciona.
fuente
solo puedes usar este código
fuente
Respuesta rápida 2:
Esto evita que textView se desplace hasta el final del texto después de configurarlo.
fuente
En Swift 3:
viewWillLayoutSubviews es el lugar para realizar cambios. viewWillAppear también debería funcionar, pero lógicamente, el diseño debería realizarse en viewWillLayoutSubviews .
En cuanto a los métodos, tanto scrollRangeToVisible como setContentOffset funcionarán. Sin embargo, setContentOffset permite que la animación esté activada o desactivada.
Suponga que UITextView se denomina suUITextView . Aquí está el código:
fuente
Tuve que llamar a la siguiente viewDidLayoutSubviews interior (llamar a viewDidLoad interior fue demasiado pronto):
fuente
Esto funcionó para mí. Se basa en la respuesta de RyanTCB, pero es la variante Objective-C de la misma solución:
fuente
fuente
ViewWillappear
lo hará instantáneamente antes de que el usuario se dé cuenta, peroViewDidDisappear
dé sección lo animará perezosamente.[mytextView setContentOffset:CGPointZero animated:YES];
NO funciona a veces (no sé por qué), así que use scrollrangetovisible en su lugar.fuente
Problema resuelto: iOS = 10.2 Swift 3 UITextView
Solo usé la siguiente línea:
fuente
viewDidLayoutSubviews
para que suceda cuando la pantalla gira. De lo contrario, el desplazamiento de contenido se desalineará.fuente
Tuve el problema, pero en mi caso, la vista de texto es la subvista de una vista personalizada y la agregué a ViewController. Ninguna solución funcionó para mí. Para resolver el problema, se agregó un retraso de 0.1 segundos y luego se habilitó el desplazamiento. Funcionó para mí.
fuente
Para mí funciona bien este código:
Para desplazarse a la posición exacta y mostrarlo en la parte superior de la pantalla, uso este código:
La configuración de contentOffset.y se desplaza hasta el final del texto y luego scrollRangeToVisible se desplaza hasta el valor de scrollToLocation. Por lo tanto, la posición necesaria aparece en la primera línea de scrollView.
fuente
Para mí en iOS 9 dejó de funcionar para mí con una cadena atribuida con el método scrollRangeToVisible (la fila 1 estaba con fuente en negrita, otras filas estaban con fuente normal)
Entonces tuve que usar:
donde el retraso es:
fuente
Intente utilizar esta solución de 2 líneas:
fuente
Aquí están mis códigos. Funciona bien.
fuente