OK, j'ai un problème avec le UITextView
. Voici le problème:
J'ajoute du texte à un fichier UITextView
. L'utilisateur double ensuite pour sélectionner quelque chose. Je change ensuite le texte dans le UITextView
(par programme comme ci-dessus) et les UITextView
défilements vers le bas de la page où il y a un curseur.
Cependant, ce n'est PAS là que l'utilisateur a cliqué. Il défile TOUJOURS vers le bas de, UITextView
quel que soit l'endroit où l'utilisateur a cliqué.
Voici donc ma question: comment forcer le UITextView
défilement vers le haut chaque fois que je change le texte? J'ai essayé contentOffset
et scrollRangeToVisible
. Aucun travail.
Toute suggestion serait appréciée.
la source
viewDidAppear()
.Si quelqu'un a ce problème dans iOS 8, je trouve que la mise en juste la
UITextView's
propriété de texte, puis en appelantscrollRangeToVisible
avec unNSRange
aveclocation:0
,length:0
, travaillé. Ma vue de texte n'était pas modifiable, et j'ai testé à la fois sélectionnable et non sélectionnable (aucun des paramètres n'a affecté le résultat). Voici un exemple Swift:la source
Et voici ma solution ...
la source
Appel
fonctionne mais appelle-le
la source
J'utilisais attribuéString en HTML avec une vue texte non modifiable. La définition du décalage de contenu n'a pas non plus fonctionné pour moi. Cela a fonctionné pour moi: désactiver le défilement activé, définir le texte, puis réactiver le défilement
la source
viewDidAppear
le cadre d'un plus grand nombre de correctifsComme aucune de ces solutions n'a fonctionné pour moi et que j'ai perdu beaucoup trop de temps à assembler des solutions, cela a finalement résolu le problème pour moi.
C'est vraiment idiot que ce ne soit pas le comportement par défaut pour ce contrôle.
J'espère que cela aide quelqu'un d'autre.
la source
self.textView.contentOffset.y
basé sur cette réponse: stackoverflow.com/a/25366126/1736679Je ne sais pas si j'ai bien compris votre question, mais essayez-vous simplement de faire défiler la vue vers le haut? Si c'est le cas, vous devriez faire
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
la source
Pour iOS 10 et Swift 3, j'ai fait:
Cela a fonctionné pour moi, je ne sais pas si vous rencontrez le problème avec la dernière version de Swift et iOS.
la source
J'ai une réponse mise à jour qui fera apparaître la vue de texte correctement, et sans que l'utilisateur ne subisse une animation de défilement.
la source
Voici comment cela fonctionnait sur la version iOS 9 afin que le textView défile en haut avant d'apparaître à l'écran
la source
Voilà comment je l'ai fait
Swift 4:
la source
Cela a fonctionné pour moi
la source
DispatchQueue.main.async(...
n'est pas nécessaire d' encapsuler l'appel , mais pour une raison quelconque, sur (par exemple) l'iPhone 5s (iOS 12.1), cela ne fonctionne que si vous expédiez. Mais comme indiqué par la pile d'appels sur le débogueur,viewWillAppear()
est déjà en cours d'exécution sur la file d'attente principale dans tous les cas ... - WTF, Apple ???Essayez ceci pour déplacer le curseur en haut du texte.
Voyez comment ça se passe. Assurez-vous d'appeler cela après que tous vos événements ont été déclenchés ou que ce que vous faites soit terminé.
la source
Mon problème est de configurer textView pour qu'il défile vers le haut lorsque la vue est apparue. Pour iOS 10.3.2 et Swift 3.
Solution 1:
Solution 2:
la source
Combiné les réponses précédentes, cela devrait maintenant fonctionner:
la source
scrollRangeToVisible
cependant.Cette ligne de code fonctionne pour moi.
la source
tu peux juste utiliser ce code
la source
Réponse Swift 2:
Cela empêche le textView de défiler jusqu'à la fin du texte après l'avoir défini.
la source
Dans Swift 3:
viewWillLayoutSubviews est l'endroit où effectuer des modifications. viewWillAppear doit également fonctionner, mais logiquement, la mise en page doit être effectuée dans viewWillLayoutSubviews .
En ce qui concerne les méthodes, scrollRangeToVisible et setContentOffset fonctionneront. Cependant, setContentOffset permet à l'animation d'être désactivée ou activée .
Supposons que UITextView est nommé comme yourUITextView . Voici le code:
la source
J'ai dû appeler le viewDidLayoutSubviews intérieur suivant (l'appel à l'intérieur de viewDidLoad était trop tôt):
la source
Cela a fonctionné pour moi. Il est basé sur la réponse de RyanTCB mais c'est la variante Objective-C de la même solution:
la source
la source
ViewWillappear
le fera instantanément avant que l'utilisateur ne puisse le remarquer, mais laViewDidDisappear
section l'animera paresseusement.[mytextView setContentOffset:CGPointZero animated:YES];
ne fonctionne PAS parfois (je ne sais pas pourquoi), alors utilisez plutôt scrollrangetovisible.la source
Problème résolu: iOS = 10.2 Swift 3 UITextView
Je viens d'utiliser la ligne suivante:
la source
viewDidLayoutSubviews
donc cela se produit lorsque l'écran tourne. Sinon, le décalage du contenu n'est pas aligné.la source
J'ai eu le problème, mais dans mon cas, textview est la sous-vue d'une vue personnalisée et l'ajoute à ViewController. Aucune des solutions n'a fonctionné pour moi. Pour résoudre le problème, un délai de 0,1 seconde a été ajouté, puis le défilement activé. Cela a fonctionné pour moi.
la source
Pour moi fonctionne bien ce code:
Pour faire défiler jusqu'à la position exacte et l'afficher en haut de l'écran, j'utilise ce code:
La définition de contentOffset.y fait défiler jusqu'à la fin du texte, puis scrollRangeToVisible fait défiler jusqu'à la valeur de scrollToLocation. Ainsi, la position requise apparaît dans la première ligne de scrollView.
la source
Pour moi, dans iOS 9, cela a cessé de fonctionner pour moi avec une chaîne attribuée avec la méthode scrollRangeToVisible (la 1 ligne était avec une police en gras, les autres lignes étaient avec une police normale)
J'ai donc dû utiliser:
où le retard est:
la source
Essayez d'utiliser cette solution à 2 lignes:
la source
Voici mes codes. Ça fonctionne bien.
la source