automáticamenteAjustaScrollViewInsets no funciona

He creado una aplicación de demostración extremadamente simple para probar la funcionalidad de automaticallyAdjustsScrollViewInsets , pero la última celda de tableView está cubierta por mi barra de tabs.

Mi código AppDelegate:

 UITabBarController *tabControl = [[UITabBarController alloc] init]; tabControl.tabBar.translucent = YES; testViewController *test = [[testViewController alloc] init]; [tabControl setViewControllers:@[test]]; [self.window setRootViewController:tabControl]; 

My testViewController (subclass de UITableViewController) Código:

 - (void)viewDidLoad { [super viewDidLoad]; self.automaticallyAdjustsScrollViewInsets = YES; self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds]; self.tableView.dataSource = self; self.tableView.scrollIndicatorInsets = self.tableView.contentInset; //[self.view addSubview:self.tableView]; // Do any additional setup after loading the view. } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 20; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@""]; cell.textLabel.text = @"test"; return cell; } 

¿Esto es un error en iOS 7? Si no, ¿qué hice mal?

Creo que automaticallyAdjustsScrollViewInsets solo funciona cuando la view tus controlleres es UIScrollView (una vista de tabla es una).

Su problema parece ser que la view su controller es una UIView normal y su UITableView es solo una subvista, por lo que deberá:

  • Haga que la vista de la tabla sea la vista "raíz".

  • Ajuste inserciones manualmente:

     UIEdgeInsets insets = UIEdgeInsetsMake(controller.topLayoutGuide.length, 0.0, controller.bottomLayoutGuide.length, 0.0); scrollView.contentInset = insets; 

Editar:

Parece que el SDK es capaz de ajustar algunas vistas de desplazamiento a pesar de no ser la vista de raíz del controller.

Hasta ahora funciona con el UIWebView UIScrollView y scrollView cuando son la subvista en el índice 0 .

De todos modos, esto puede cambiar en futuras versiones de iOS, por lo que usted es más seguro ajustar las inserciones usted mismo.

El controller de vista debe estar directamente en la stack de un UINavigaitonController para que automaticallyAdjustsScrollViewInsets funcione (es decir, no un controller de vista secundario)

Si se trata de un controller de vista secundario de otro controller de vista que se encuentra en la stack de navigation, puede configurar automaticallyAdjustsScrollViewInsets = NO en el primario. Alternativamente puede hacer esto:

 self.parentViewController.automaticallyAdjustsScrollViewInsets = NO; 

Estaba teniendo el mismo problema, una vista de tabla con relleno superior no deseado.

Todas las respuestas dicen que arreglar arreglando automaticallyAdjustsScrollViewInsets = NO , pero eso no estaba eliminando el relleno para mí.

Similar a las otras respuestas aquí, estas instrucciones deben modificarse ligeramente si está utilizando una jerarquía de vista no estándar.

Tenía un UIViewController con un UITableViewController incorporado. No funcionaba para establecer automaticallyAdjustsScrollViewInsets en el controller de vista de tabla.

En su lugar, establezco automaticallyAdjustsScrollViewInsets = NO en el UIViewController padre que estaba incrustando mi controller de vista de tabla. Eso eliminó con éxito el relleno en la Vista de tabla.

Tengo esta jerarquía:

  1. custom navigationcontroller contiene tabbarcontroller personalizado

  2. custom tabbarcontroller contiene varios controlleres

  3. estos controlleres contienen subviews y uno de ellos contiene una subclass de uiscrollview.

Tuve que configurar automáticamenteAdjustsScrollViewInsets a NO

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.automaticallyAdjustsScrollViewInsets = NO; 

en el tabbarcontroller personalizado . Otros controlleres en la jerarquía no tienen ningún impacto en el comportamiento de la vista de desplazamiento nested.

 self.textView.contentInset = UIEdgeInsetsMake(1.0,0.0,0,0.0); [self setEdgesForExtendedLayout:UIRectEdgeNone];