En una vista de contenedor, la barra de navigation de un controller de navigation no cambia de tamaño para include la barra de estado

He creado una aplicación que necesita tener una barra encima de la barra de navigation y otras vistas. Para lograr esto, estoy usando un controller de vista con una vista para la barra superior, y luego una vista de contenedor para todo lo demás. A veces, la barra superior debe estar oculta. Estoy usando la reproducción automática para ocultar la barra superior (establece su altura en 0) y la vista del contenedor se expande para llenar la pantalla (la parte superior del contenedor es igual a la parte inferior de la barra superior). La vista contenedor contiene un controller de navigation porque necesito una barra de navigation debajo de la barra superior a veces. Cuando inicio la aplicación, todo funciona bien, como se muestra a continuación:

introduzca la descripción de la imagen aquí

Como puede ver, la barra de navigation se mantiene en la altura deseada, que se expande para include la barra de estado

Sin embargo, cuando se toca la barra superior, uso un segue para presentar (no presionar) un controller de vista desde mi controller de vista raíz (no el contenedor), y luego miro la misma pantalla con la barra de navigation, la barra de navigation es ya no se extiende y se superpone a la barra de estado como se ve a continuación:

introduzca la descripción de la imagen aquí

¿Por qué presentar un controller de vista romper esto? Y luego, ¿cómo podría rectificar esto o evitarlo?

Una posible solución que podría hacer es presentar un controller de vista desde dentro de la vista del contenedor, que funciona, solo tendría que configurar el controller de vista actual en el contenedor a un delegado del controller raíz, de modo que cuando se toque la barra superior, le dice al controller de vista en el contenedor que presente el nuevo controller de vista. Sin embargo, esta no sería mi primera opción, especialmente si hay otros escenarios que causan este problema.

¡Gracias por cualquier ayuda!

Debe activar automaticallyAdjustsScrollViewInsets ajustes de ScrollViewInsets para todos los controlleres de vista secundarios y administrar los recuadros (o la configuration para que no sean necesarios). De forma pnetworkingeterminada, automaticallyAdjustsScrollViewInsets está activado para todos los controlleres de vista (que es lo que quiere para los VC presentados en 'pantalla completa').

En el momento en que ve controlleres casi random se actualizan para reorganizarse para las inserciones de desplazamiento a medida que cambia la jerarquía de VC.

Probablemente topLayoutGuide automaticallyAdjustsScrollViewInsets para todos los VC (aparte de la raíz) y cambiaré la vista del encabezado para que sea de altura completa o la altura de la barra de estado (que debería ser la length de la topLayoutGuide de topLayoutGuide del VC raíz). Cuando se contrae a la altura de la barra de estado, la vista de encabezado también podría cambiar el color para que coincida con el del VC superior actual.