UITextView autoscroll a última linha
-
05-07-2019 - |
Pergunta
Ao escrever em um UITextView mais texto do que pode caber inteiramente dentro dele, o texto irá rolar para cima e o cursor, muitas vezes, colocar-se uma ou duas linhas acima da linha de fundo da vista. Esta é uma frustrante pouco como eu quero meu aplicativo para fazer bom uso de toda a altura da exibição de texto.
Basicamente o que eu quero é para configurar o UITextView para escrever-se a ele da parte mais baixa e não usá-lo apenas para rolagem.
Eu vi algumas perguntas semelhantes aqui , aqui aqui . No entanto, eu não vi uma solução adequada ainda.
Graças
Solução
Eu tenho uma implementação ligeiramente diferente (eu quero desativar a rolagem), mas eu também tinha que parar o cursor saltar para fora do meu UITextView. Para fazer isso, eu implementei um nulo scrollRectToVisible no meu UITextView subclasse. Como esta:
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
{
// do nothing. This fixes the cursor jumping above the field defect.
}
Outras dicas
excelente solução está em linhas subclasse UITextView add
-(void) setContentOffset:(CGPoint)contentOffset {
[self setContentInset:UIEdgeInsetsZero];
[super setContentOffset:contentOffset];
}
É um trabalho!
Use esta ??p>
NSRange myRange=NSMakeRange(outPutTextView.text.length, 0);
[outPutTextView scrollRangeToVisible:myRange];
se eu entendi direito, você pode usar
[textView setScrollEnabled:NO];
Para desativar a rolagem. o que dizer não para digitar quando o cursor alcançou a margem inferior ... talvez não seja boa solução, mas você pode adicionar algum valor limite (máximo de caracteres no [textView text]
) e retornar NO no
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
método delegado do UITextView se [[textView text] length] > maxCharacters
.
Eu acho parecem a propriedade 'contentOffset' também pode ser usado ...
Eu tenho a última linha por setFrame:
- Você pode setFrame para cerca de uma altura de linha
- Quando você está editando, em - (BOOL)
textView:shouldChangeTextInRange:replacementText:
, usoscrollRangeToVisible:
, o argumento éselectedRange
- Quando você terminar edição, setFrame para o tamanho original