I have building a simple notification panel where message tiles appear in a list on the edge of the screen. When notifications expire they are removed from the list, and the other notifications move up to fill the space.
I implemented this with a VBoxContainer for the list of notifications with child scenes for each notification. Each child is a PanelContainer containing an HBoxContainer with TextureRect for an icon, plus a Label for the message. The child has a Timer to trigger deletion and an AnimationPlayer to fade it out (using modulate on the PanelContainer) before calling queue_free()
Everything works beautifully, except when a child notification tile is removed from the VBoxContainer, I would really like the visual effect of the remaining children smoothly scrolling up to fill the space, instead of jumping up when a child above it removed.
I tried animating the scale.y of each child as it is being removed so that it gets smaller vertically (after I fade it out). I cannot get the VBoxContainer to respond to this scaling - the VBoxContainer keeps the same vertical space for the child until it is fully removed, and then all the other children jump up. I also tried using process to change scale.y instead of an animation, with the same result. I also tried forcing the child to emit itemrect_changed or resized signals during the scaling process, however this also did not work.
Is there any way I can make a VBoxContainer respond smoothly to one it's children getting smaller in an animation?