Ajuste la inserción de la vista de desplazamiento dentro de un controller de vista secundaria

Obtuve una jerarquía del controller de vista con la siguiente relación padre-hijo:

UINavigationController (contains) MainViewController (contains) UIPageViewController (contains) UITableViewController 

En el interior de UITableViewController, tengo automaticallyAdjustScrollViewInset establecido en YES , pero esta configuration no parece funcionar. Como se puede ver en la siguiente captura de pantalla, el contenido de la vista de contentInset no parece ajustarse con la barra de navigation.

Mi objective es hacer que el contentInset la vista de la contentInset se ajuste automáticamente con la barra de navigation externa. Si la barra de navigation o la barra de estado está oculta, quiero que el recuadro de contenido se ajuste en consecuencia.

¿Cómo puedo hacer eso? ¡Gracias!

introduzca la descripción de la imagen aquí

UINavigationController ajusta automáticamente la topLayoutGuide topLayoutGuide de su controller topLayoutGuide .

En tu caso, no se está propagando lo suficiente.

Si se asegura de que este topLayoutGuide lo networkinguzca a su controller de vista de tabla, entonces no tendrá que configurar manualmente el contenido.

Además, la jerarquía de su controller de vista parece excesivamente compleja (no conozco los detalles de su proyecto). Esta versión simplificada de lo que tienes te dará lo que buscas de forma gratuita.

introduzca la descripción de la imagen aquí

Al parecer, el Controlador UINavigation más externo aún es accesible para el UITableViewController más interno a través de su propiedad navigationController .

Debido a que el marco de la barra de navigation es accesible por el controller de vista más interno, podemos hacer algo así en su viewDidLayoutSubviews .

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.tableView.contentInset = UIEdgeInsetsMake(CGRectGetMaxY(self.navigationController.navigationBar.frame), 0, 0, 0); self.tableView.scrollIndicatorInsets = self.tableView.contentInset; }