Espacio en blanco en la parte superior de UITextView en iOS 10

Tengo UITextView con algo de texto. Todo estaba bien con iOS 6 pero ahora con iOS 7 deja el espacio en blanco en la parte superior y luego coloca el texto debajo del medio de la vista de texto.enter image description here

No configuré ningún contentOffSet. ¡Por favor ayuda!

preguntado el 21 de septiembre de 13 a las 12:09

14 Respuestas

Una vista de texto es una vista de desplazamiento. Los controladores de vista agregarán un desplazamiento de contenido automáticamente para desplazarse por las vistas, ya que se supone que querrán desplazarse hacia arriba detrás de la barra de navegación y la barra de estado.

Para evitar esto, establezca la siguiente propiedad en el controlador de vista que contiene la vista de texto:

self.automaticallyAdjustsScrollViewInsets = NO

Respondido 26 Abr '16, 13:04

Esta es una mejor respuesta porque aborda no solo cómo corregir el problema, sino también por qué sucede en primer lugar. - Esteban Melvin

Por cierto, no tienes que subclasificar y anular. Simplemente configure automaticAdjustsScrollViewInsets en NO después de crear una instancia de UITextView. - giro a la izquierda

@leftspin es un caso bastante raro en el que no ha subclasificado un controlador de vista. Y anular el método significa que su código seguirá funcionando en versiones inferiores de iOS: establecer la propiedad significa que primero necesita una verificación de compatibilidad. - jrturton

Entonces, si mi controlador de vista de modelo está fuera de UINavigationController, ¿se borraría el desplazamiento? Es un poco loco... Este comportamiento SÓLO es correcto cuando mi vista de texto está alineada en la parte superior, de lo contrario es basura... ¿Alguien podría explicar por qué Apple hizo algo así? - Pablo Brewczynski

@jrturton se disculpa por ser una publicación anterior y discúlpeme porque soy nuevo en Objective-C, pero actualmente es una propiedad de UIViewController... ¿solía ser un método? - Craig

La respuesta actual que dio IronManGill no es una buena solución, porque no se basa en una comprensión de por qué ocurre el problema en primer lugar.

La respuesta de jrturton tampoco es la forma más limpia de resolverlo. No es necesario anular. ¡Mantenlo simple!

Todo lo que necesita es configurar lo siguiente:

self.automaticallyAdjustsScrollViewInsets = NO;

en el método viewDidLoad.

Consulte los documentos: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin

Respondido el 29 de junio de 17 a las 14:06

Hacer cambios en el guión gráfico tal vez a veces sea mejor. Vaya a "Inspector de identidad" -> "Atributos de tiempo de ejecución definidos por el usuario" y agregue una definición allí. - hufeng03

automaticallyAdjustsScrollViewInsets es obsoleto. Desde iOS11, use contentInsetAdjustmentBehavior - Corazón

En el Generador de interfaces,

  • Seleccione el controlador de vista que contiene UITextView.
  • Vaya al inspector de atributos.
  • Desmarque "Ajustar recuadros de vista de desplazamiento".

Respondido 13 Oct 13, 22:10

Esta es la solución más fácil para mi caso en ios8: platino

Nota: es una propiedad de UIViewController. No pude encontrarlo y luego me di cuenta de que no leí el texto por completo - usuario1199624

Esto funcionó para mí

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;

Respondido 17 Abr '15, 06:04

Ve a Interface Builder:

  1. Seleccione view controller que contiene tu text view
  2. desmarcar Adjusts Scroll View Insets perfecta

enter image description here

Respondido el 10 de enero de 16 a las 07:01

esto era lo que estaba buscando. también puede hacer esto agregando 'self.automaticallyAdjustsScrollViewInsets = false' a viewController - CodeOverRide

Esta es una respuesta buena y directa, que acaba de terminar mi búsqueda de "por qué no se muestra este texto". - UpSampler

Realmente me pregunto si esta es una característica real... Este recuadro automático de 64 puntos solo se agrega cuando el UIScrollView or UITextView como la mayor profundidad de todas las subvistas de la vista del controlador de vista. Por ejemplo, si agrega una vista detrás (aquí estoy hablando de z-buffer, no de imbricación de vista) de la vista de desplazamiento, este recuadro de 64 puntos no se agrega automáticamente.

Por ejemplo, este agrega el recuadro:

enter image description here

En este caso, el recuadro no se agrega:

enter image description here

Esto realmente me parece extraño... ¿Por qué el sistema operativo miraría la profundidad de la vista para decidir si debería extender la vista?

Respondido el 27 de Septiembre de 13 a las 09:09

Puede eliminar el espacio en blanco en la parte superior de su UITextView añadiendo:

yourTextView.textContainerInset = UIEdgeInsetsZero;

respondido 17 nov., 15:10

En rápido (Xcode 6)

 self.automaticallyAdjustsScrollViewInsets = false

Respondido 26 Feb 15, 18:02

Haz esto en viewDidLoad del controlador de vista con la vista de texto. - Suragch

automaticallyAdjustsScrollViewInsets es obsoleto. Desde iOS11, use contentInsetAdjustmentBehavior - Corazón

Resolví este problema configurando la compensación de contenido en un valor negativo. Aquí está el código Swift.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

Respondido 04 ago 15, 13:08

Esta fue la mejor solución manteniendo las inserciones y desplazándose bajo la barra translúcida correctamente. Yo sugeriría esta modificación. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO]; - InitJason

Nada funcionó para mí, excepto esto. Rápido, Xcode 9.1. - Ashok

Lo que tienes que entender es que esto se relaciona con la barra de navegación:

  • Si su contenido va debajo de la barra de navegación, desea que el controlador de vista ajuste automáticamente las inserciones de la vista de desplazamiento (predeterminado).
  • Si su contenido no va debajo de la barra de navegación (probablemente usó la guía de diseño superior para la restricción de espacio superior), puede desactivar el ajuste de inserción de vista de desplazamiento automático como se menciona en la mayoría de las otras respuestas.

Respondido el 28 de enero de 16 a las 20:01

Intenté el siguiente truco, funcionó.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}

Respondido el 23 de junio de 17 a las 22:06

Solución para Swift 4:

textView.textContainerInset = UIEdgeInsets.zero

Respondido 19 Oct 18, 14:10

Esta es una solución poco profesional, estoy seguro... Pero simplemente poner una etiqueta en blanco detrás de la vista de texto resuelve el problema.

Respondido el 03 de Septiembre de 14 a las 19:09

esto no es una solución =) - ilker baltaci

Esto simplemente funcionó para mí (disponible desde iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];

Respondido el 09 de enero de 15 a las 00:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.