¿Por qué UIScrollView deja espacio en la parte superior y no se desplaza hacia la parte inferior

Soy nuevo en la progtwigción de Object-C.

Estoy usando UIScrollView con algunas tags, imágenes y texto en él.

He desactivado el diseño automático y ya he intentado con “Ajustar las configuraciones de vista de desplazamiento” en (situación descrita en el título) y desactivada (no se desplaza).

Esto es lo que inserto en viewDidLoad:

[scroller setScrollEnabled:YES]; [scroller setContentSize:CGSizeMake(320, 687)]; 

Pero debo estar perdiendo algo muy simple.

1 … ¿Por qué UIScrollView deja espacio en la parte superior

Con Storyboard – Controlador de vista Goto> Inspector de atributos> Desmarque la propiedad Ajustar la propiedad de desplazamiento de la vista de desplazamiento

Con código : para obtener espacio adicional, configure la propiedad viewController automaticallyAdjustsScrollViewInsets viewController en NO , de manera predeterminada es YES .

 self.automaticallyAdjustsScrollViewInsets = false; scroller.contentInset = UIEdgeInsetsZero; scroller.scrollIndicatorInsets = UIEdgeInsetsZero; scroller.contentOffset = CGPointMake(0.0, 0.0); 

2 … no se desplaza hacia abajo

Para hacerlo desplazarse intente con un gran número en CGSizeMake(320, 1687) como CGSizeMake(320, 1687) . Si funciona, eso significa que no está configurando el contentSize suficientemente grande como para tener todo su contenido.

Simplemente seleccione su controlador de vista y configure la opción mostrada en falso (desmarque)

Inspector de ViewController

iOS 11

En mi caso, solo cambiar esta propiedad UIScrollView Insets Insets en IB de Automatic a Never ayudó.

iOS 11

 if #available(iOS 11.0, *) { scrollView.contentInsetAdjustmentBehavior = .never } else { automaticallyAdjustsScrollViewInsets = false } 

Swift 3.0

 self.automaticallyAdjustsScrollViewInsets = false scrollView.contentInset = UIEdgeInsets.zero scrollView.scrollIndicatorInsets = UIEdgeInsets.zero; 

Swift 3.0

 self.automaticallyAdjustsScrollViewInsets = false scrollView.contentInset = UIEdgeInsets.zero scrollView.scrollIndicatorInsets = UIEdgeInsets.zero; scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0); 

Swift 3 (diseño automático)

  1. Cambiar “Márgenes de diseño” a explícito
  2. Establecer márgenes según sus necesidades

enter image description here

En realidad, el margen no tiene nada que ver con ScrollViewInsets o contentOffset . Es solo un conflicto entre SuperView.Top y SafeArea.Top pinning, ocurre cuando fija el UIScrollView en la parte superior, inferior, izquierda y derecha.

Esta es la forma correcta de cubrir el margen superior.

1) Fija los cuatro lados.

Fijando

2) Seleccione la restricción superior> Cambiar el segundo elemento a Superview.Top

conflicto

3) Luego, el último paso es cambiar la Constante a 0 (cero). enter image description here

Es posible que desee comprobar esto también: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift

En iPhoneX esto también ocurrirá debido a algunas cosas de área segura sin sentido que el diseño automático intentó dar cuenta. Arregle (para iPhoneX) con esto:

 if (@available(iOS 11.0, *)) { scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } 

En su archivo .m de vista, use este código para solucionar este problema

 -(void)layoutSubviews{ // To fix iOS8 bug of scrollView autolayout if([[[[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."]objectAtIndex:0] integerValue] == 8){ [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; } }