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


116

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 de la mitad de la vista de texto.ingrese la descripción de la imagen aquí

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

Respuestas:


217

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

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

1
Por cierto, no tiene que subclasificar y anular. Simplemente configure automáticamenteAdjustsScrollViewInsets en NO después de crear una instancia de UITextView.
leftspin

1
@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

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

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

58

La respuesta actual que dio IronManGill no es una buena solución, porque no se basa en la 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


1
Hacer un cambio 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, usecontentInsetAdjustmentBehavior
Cœur

47

En Interface Builder,

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

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

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

37

Esto funcionó para mi

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

24

Ir a Interface Builder:

  1. Seleccione view controllerque contenga sutext view
  2. desmarcar Adjusts Scroll View Insetspropiedad

ingrese la descripción de la imagen aquí


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

10

Realmente me pregunto si esto es una característica real ... Este recuadro automático de 64 puntos solo se agrega cuando el UIScrollViewo UITextViewcomo 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 vistas) la vista de desplazamiento, esta inserción de 64 puntos no se agrega automáticamente.

Por ejemplo, este agrega el recuadro:

ingrese la descripción de la imagen aquí

En este caso, no se agrega el recuadro:

ingrese la descripción de la imagen aquí

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?



6

Puede eliminar el espacio en blanco en la parte superior UITextViewagregando:

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

Resolví este problema estableciendo el desplazamiento de contenido en un valor negativo. Aquí está el código Swift.

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

Esta fue la mejor solución para mantener las inserciones y el desplazamiento bajo la barra translúcida correctamente. Sugeriría esta modificación. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason

1
Nada funcionó para mí excepto esto. Swift, Xcode 9.1.
Ashok

1

Lo que debes 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 utilizó la guía de diseño superior para la restricción de espacio superior), puede deshabilitar el ajuste de inserción de la vista de desplazamiento automático como se menciona en la mayoría de las otras respuestas.

1

Probé el siguiente truco, funcionó.

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


0

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.


1
esto no es una solución =)
Ilker Baltaci

0

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

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.