UITextField shouldChangeTextInRange con Text atribuido provoca un comportamiento extraño de desplazamiento

Necesito capturar el text typescript, antes de renderizarlo, para aplicarle algunos attributes.

Para eso estoy usando el método delegado shouldChangeTextInRange de UITextView junto con NSAttributedString. Hasta ahora, bueno, y funciona.

El problema es que cuando UITextView recibe cierta cantidad de text y comienza a desplazarse, cambiar el text atribuido hace que se desplace a la parte superior, mientras que el siguiente carácter hará que se desplace hacia atrás hasta el final.

Sigue ese baile moviéndose hacia arriba y hacia abajo mientras teclea ..

Establecer textview.text, en lugar del text atribuido, funciona n

¿Cualquier sugerencia?

Gracias por adelantado.

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSAttributedString * newString = [[NSAttributedString alloc] initWithString:text attributes:nil]; NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithAttributedString:_textView.attributedText]; [string insertAttributedString:newString atIndex:range.location]; textView.attributedText = string; range.location += text.length; textView.selectedRange = range; return NO; } 

No estoy seguro sobre el punto de su shouldChangeTextInRange , pero para corregir el desplazamiento automático no deseado, trate de rodear la configuration de textView.attributedText con [textView setScrollEnabled:NO] .

Es decir:

 [textView setScrollEnabled:NO]; textView.attributedText = string; range.location += text.length; [textView setScrollEnabled:YES]; 
 textView.layoutManager.allowsNonContiguousLayout = NO; 

Entonces no se desplazará a la parte superior cuando cambie el text atribuido. Esto funciona para mi.