La barra de tabs personalizada como la vista de contenedor con transparencias no establece la guía de layout inferior

Quiero crear un controller de vista contenedor personalizado que sea bastante similar en comportamiento a una barra tabulada translúcida . En mi storyboard, tengo algo como esto:

Storyboard con vista de contenedor [1]

El problema

El contenido en la vista del contenedor se expande debajo de la vista del button de la barra de tabs para la translucidez. Sin embargo, como esta no es una barra de UIKit estándar, UIKit no está configurando el bottomLayoutGuide en el controller secundario, que es por defecto 0 .

El resultado es que el controller secundario interno no establece correctamente las inserciones en el contenido cuando hay una vista de desplazamiento y, por lo tanto, los últimos píxeles del contenido están cubiertos por la vista tababár.

Solución sucia

Estoy consciente de que podría hacer una solución personalizada en la que cambie el contentInset manual en los controles de vista secundarios, pero esto será bastante complicado ya que hay varios secundarios. Además, esta barra de tabulación personalizada animará la input / salida y puede tener tamaños diferentes, por lo que este enfoque será muy complejo y vincula muy estrechamente los controlleres secundarios a la implementación personalizada de la barra de tabulación. ¡Mucho código adicional y dependencies desde el layout del niño al tabbar!

Lo que quiero lograr

Si utilizara una barra de tabs estándar, el contenido se mostraría correctamente porque el sistema usa la bottomLayoutGuide de bottomLayoutGuide para agregar inserciones a los desplazamientos internos fuera de la caja.

De alguna manera, quiero realizar las mismas acciones con mi barra de tabs personalizada, por lo que no es necesario cambiar nada más en el código de mi controller secundario (y hacer que sean less dependientes de los elementos internos de la barra de tabs), por lo que puedo hacer reference a los márgenes de layout desde InterfaceBuilder normalmente, sin importar cuál es la vista del contenedor.

Como beneficio adicional, este enfoque podría permitirme cambiar el bottomLayoutGuide cuando se anima la input / salida o el cambio del tamaño de la barra de tabs, y solo solicito a las subvenciones el layout de nuevo.

Lo que he intentado

He intentado diferentes acciones en el bottomLayoutGuide tanto de la tabBar como de los controlleres secundarios. Algunos ejemplos que he probado son:

bottomLayoutGuide.heightAnchor.constraintEqualToConstant(40) bottomLayoutGuide.topAnchor.constraintEqualToAnchor(tabBarView.topAnchor)

Y también he intentado llamar a view.setNeedsUpdateConstraints() si acaso, pero no importa lo que haga bottomLayoutGuide.length siempre parece devolver 0.0 .

También he visto que las vistas ahora tienen un layoutMarginsGuide pero no parece ser lo mismo.

Preguntas

  • ¿Por qué la bottomLayoutGuide siempre es 0 ? ¿Me estoy perdiendo de algo?
  • ¿Alguien sabe cómo resolver esto de una manera elegante? ¿Algún otro enfoque limpio al problema?

¡Gracias!