UITextView se desplaza parcialmente hacia abajo cuando se abre la vista

Creo un UITextView y le agrego mucho text. Cuando inicio la vista, UITextView siempre se desplaza parcialmente hacia abajo. Por qué el usuario puede desplazarse hacia arriba, pero se siente raro.

¿Lo que pasa? ¿Extrañé alguna configuration obvia?

Consulte la siguiente image. Parte del text se recorta. Tomo prestado el text del enlace .

introduzca la descripción de la imagen aquí

Comencé una simple aplicación de vista única. Así es como mi viewDidLoad :

 - (void)viewDidLoad { [super viewDidLoad]; NSString* path = [[NSBundle mainBundle] pathForResource:@"license" ofType:@"txt"]; NSString* terms = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; self.textField.text = terms; } 

Y este es mi guión gráfico:

introduzca la descripción de la imagen aquí

Así es como se ve después de desplazarse manualmente hasta la parte superior.

introduzca la descripción de la imagen aquí

Agregue esta línea al final de su viewDidLoad . viewDidLoad :

 [self.textField scrollRangeToVisible:NSMakeRange(0, 1)]; 

Me gusta esto:

 - (void)viewDidLoad { [super viewDidLoad]; NSString* path = [[NSBundle mainBundle] pathForResource:@"license" ofType:@"txt"]; NSString* terms = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; self.textField.text = terms; [self.textField scrollRangeToVisible:NSMakeRange(0, 1)]; } 

Esto solía suceder en todos los dispositivos iPhone / iPod en modo horizontal, y las soluciones de los demás funcionarán. Ahora solo sucede para iPhone 6+ o iPhone 6s + en modo horizontal. Esto es un trabajo para eso:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; dispatch_async(dispatch_get_main_queue(), ^{ [self.textView scrollRangeToVisible:NSMakeRange(0, 1)]; }); } 

La vista se desplaza de alguna manera después de viewWillAppear y before viewDidAppear , y es por eso que necesitamos el envío anterior.

Tuve el mismo problema y lo solucioné obteniendo la position de desplazamiento anterior y restableciéndolo después de actualizar el "text"

 CGPoint p = [self.texField contentOffset]; self.textField.text = terms; [self.textField setContentOffset:p animated:NO]; [self.textField scrollRangeToVisible:NSMakeRange([tv.text length], 0)]; 

Para aquellos que usan Xamarin, esta es la única solución que me funciona:

 textView.Text = "very long text"; DispatchQueue.MainQueue.DispatchAsync(() => { textView.ContentOffset = new CGPoint(0, 0); });