OK, estou tendo problemas com o UITextView
. Aqui está o problema:
Eu adiciono algum texto a a UITextView
. O usuário então clica duas vezes para selecionar algo. Em seguida, altero o texto no UITextView
(programaticamente como acima) e os UITextView
pergaminhos para a parte inferior da página, onde há um cursor.
No entanto, NÃO foi aí que o usuário clicou. SEMPRE rola para a parte inferior do, UITextView
independentemente de onde o usuário clicou.
Portanto, aqui está minha pergunta: Como faço para forçar a UITextView
rolagem para o topo toda vez que altero o texto? Eu tentei contentOffset
e scrollRangeToVisible
. Nenhum trabalho.
Qualquer sugestão seria apreciada.
iphone
ios
uitextview
Sam Stewart
fonte
fonte
viewDidAppear()
.Se alguém tem esse problema no iOS 8, descobri que apenas definir o
UITextView's
propriedade de texto, em seguida, chamandoscrollRangeToVisible
com umNSRange
comlocation:0
,length:0
, funcionou. Minha visualização de texto não era editável e testei selecionável e não selecionável (nenhuma configuração afetou o resultado). Aqui está um exemplo do Swift:fonte
E aqui está minha solução ...
fonte
Chamando
funciona, mas ligue
fonte
Eu estava usando attributeString em HTML com visualização de texto não editável. Definir o deslocamento de conteúdo também não funcionou para mim. Isso funcionou para mim: desabilite a rolagem habilitada, defina o texto e habilite a rolagem novamente
fonte
viewDidAppear
como parte de uma série mais ampla de correçõesComo nenhuma dessas soluções funcionou para mim e eu perdi muito tempo reunindo soluções, isso finalmente resolveu para mim.
É realmente bobo que este não seja o comportamento padrão para este controle.
Espero que isso ajude alguém.
fonte
self.textView.contentOffset.y
base nesta resposta: stackoverflow.com/a/25366126/1736679Não tenho certeza se entendi sua pergunta, mas você está tentando simplesmente rolar a visualização para o topo? Se sim, você deve fazer
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
fonte
Para iOS 10 e Swift 3, fiz:
Funcionou para mim, não tenho certeza se você está tendo problemas com a versão mais recente do Swift e iOS.
fonte
Tenho uma resposta atualizada que fará com que a visualização do texto apareça corretamente e sem que o usuário experimente uma animação de rolagem.
fonte
É assim que funcionava no iOS 9 Release, de modo que textView é rolado na parte superior antes de aparecer na tela
fonte
Foi assim que eu fiz
Swift 4:
fonte
Isso funcionou para mim
fonte
DispatchQueue.main.async(...
não é necessário, mas por algum motivo, no (por exemplo) iPhone 5s (iOS 12.1), ele não funciona a menos que você envie. Mas conforme relatado pela pilha de chamadas no depurador,viewWillAppear()
já está rodando na fila principal em todos os casos ... - WTF, Apple ???Tente fazer isso para mover o cursor para o topo do texto.
Veja como isso vai. Certifique-se de ligar assim após todos os seus eventos terem disparado ou o que quer que você esteja fazendo estiver feito.
fonte
Meu problema é definir textView para rolar para o topo quando view apareceu. Para iOS 10.3.2 e Swift 3.
Solução 1:
Solução 2:
fonte
Combinadas as respostas anteriores, agora deve funcionar:
fonte
scrollRangeToVisible
entanto.Esta linha de código funciona para mim.
fonte
só você pode usar este código
fonte
Resposta do Swift 2:
Isso evita que o textView role para o final do texto após configurá-lo.
fonte
Em Swift 3:
viewWillLayoutSubviews é o lugar para fazer alterações. viewWillAppear também deve funcionar, mas logicamente, o layout deve ser executado em viewWillLayoutSubviews .
Com relação aos métodos, scrollRangeToVisible e setContentOffset funcionarão. No entanto, setContentOffset permite que a animação seja desativada ou ativada .
Suponha que UITextView seja nomeado como yourUITextView . Aqui está o código:
fonte
Tive que chamar o seguinte dentro de viewDidLayoutSubviews (chamar dentro de viewDidLoad era muito cedo):
fonte
Isso funcionou para mim. É baseado na resposta da RyanTCB, mas é a variante Objective-C da mesma solução:
fonte
fonte
ViewWillappear
fará isso instantaneamente antes que o usuário perceba, masViewDidDisappear
seção irá animá-la preguiçosamente.[mytextView setContentOffset:CGPointZero animated:YES];
NÃO funciona às vezes (não sei por quê), então use scrollrangetovisible.fonte
Problema resolvido: iOS = 10.2 Swift 3 UITextView
Acabei de usar a seguinte linha:
fonte
viewDidLayoutSubviews
para que aconteça quando a tela girar. Caso contrário, o deslocamento de conteúdo ficará desalinhado.fonte
Eu tive o problema, mas no meu caso textview é a subview de alguma view customizada e a adicionei ao ViewController. Nenhuma das soluções funcionou para mim. Para resolver o problema, adicionou um atraso de 0,1 seg e depois habilitou a rolagem. Funcionou para mim
fonte
Para mim, funciona bem este código:
Para rolar para a posição exata e mostrá-lo no topo da tela, eu uso este código:
A configuração de contentOffset.y rola até o final do texto e, em seguida, scrollRangeToVisible rola até o valor de scrollToLocation. Assim, a posição necessária aparece na primeira linha de scrollView.
fonte
Para mim, no iOS 9, parou de funcionar para mim com string atribuída com o método scrollRangeToVisible (a 1 linha estava com fonte em negrito, outras linhas estavam com fonte regular)
Então eu tive que usar:
onde o atraso é:
fonte
Tente usar esta solução de 2 linhas:
fonte
Aqui estão meus códigos. Funciona bem.
fonte