Pantalla completa UIScrollView no funciona correctamente

Tengo una aplicación como la aplicación de fotos donde la vista principal es un UIScrollView que ocupa todo el tamaño de la pantalla. Además, al igual que la aplicación de fotos, cuando el usuario toca la pantalla, hay barras de herramientas, estado y navigation translúcidas que reaparecen / desaparecen.

Tengo un problema al configurar la vista principal de UIViewControllers como UIScrollView y hacer que ocupe toda la longitud de la pantalla. El problema es que cuando se muestran las barras de navigation y estado, el UIScrollView es empujado hacia abajo por la altura de las barras de navigation y estado (no pasa por debajo como se supone). Cuando el usuario toca la pantalla y las barras de navigation / estado desaparecen, luego se restablece para ocupar toda la longitud de la pantalla como se supone.

Un trabajo sencillo para configurar la vista principal como una UIView y adjuntar una UIScrollView encima de ella funciona. Sin embargo, me gustaría probar y hacer que esto funcione sin ninguna solución (es decir, ajustando UIScrollViews contentInset , etc.) porque, en teoría, debería funcionar.

A continuación se muestra el código que estoy implementando:

 - (void)loadView { self.wantsFullScreenLayout = YES; UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(0,0,320,480)]; scrollView.contentSize = CGSizeMake(320, 480); scrollView.scrollEnabled = NO; scrollView.contentOffset = CGPointZero; scrollView.bounces = NO; self.view = scrollView; [scrollView release]; } - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBar.translucent = YES; [[UIApplication shanetworkingApplication] setStatusBarStyle: UIStatusBarStyleBlackTranslucent animated: NO]; self.navigationController.toolbarHidden = NO; self.navigationController.toolbar.barStyle = UIBarStyleBlack; self.navigationController.toolbar.translucent = YES; [self startTimer]; } - (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; self.navigationController.navigationBar.translucent = NO; [[UIApplication shanetworkingApplication] setStatusBarStyle: UIStatusBarStyleDefault animated: NO]; [self cancelTimer]; } 

ACTUALIZACIÓN: noté que es el contentOffset y el contentInset que están cambiando, no el marco scrollViews . Cuando las barras han desaparecido y el UIScrollView es del tamaño completo de la pantalla (como debería ser), el contentOffset la contentOffset y contentInset son los siguientes:

 Content Offset: {0, -20} Content Inset: {20, 0, 44, 0} 

Cuando las barras están visibles y el UIScrollView se presiona hacia abajo, los contentOffset y contentInset son los siguientes:

 Content Offset: {0, -64} Content Inset: {64, 0, 44, 0} 

Resolví un problema similar en iOS7 después de leer la Guía de transición de UI de Apple: https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

Resulta que UIViewController tiene una propiedad boolean automaticallyAdjustsScrollViewInsets . El valor pnetworkingeterminado es verdadero, desactivar esto hizo que mi UIScrollView llene toda la window, en lugar de ser presionada hacia abajo.

Hablé con DTS sobre esto y me dijeron que este es el comportamiento diseñado y recomendé adjuntar el UIScrollView a una UIView .

Intente establecer:

 self.view.frame = CGRectMake(0.f, -44.f, 320.f 480.f); 

Puede que no se ajuste al tamaño que desee, pero puede ajustarlo …