Container layout jumps unpredictably when scrolling / zooming content inside (Panel UI)

Hi,

I’m building a custom timeline UI using Container COMPs and Panel UI (no TOP rendering).
The setup is roughly:

  • A fixed-width timeline “viewport” container (1280px wide)

  • Inside it, a wider container that represents the scrollable timeline content

  • The inner container’s x and w are controlled via scrollbar + zoom factor

  • Timeline cues and effect blocks are children of that scrollable container

  • Zooming changes the inner container width, scrolling changes its x

The problem:
Sometimes scrolling or zooming works correctly, but other times the entire UI layout jumps or shifts, as if the timeline container is affecting sibling containers or parent layout. It feels non-deterministic — the same interaction may work one moment and break the next.

I’ve already tried:

  • Setting Parent Alignment = Ignore / Ignore and Ignore Margins

  • Using fixed width/height for the viewport container

  • Ensuring only the inner “canvas” container moves (not the viewport)

  • Avoiding changing the viewport container’s x

  • Removing Fill / Fill Weight usage

  • Deferring replicator.recreateall() by 1 frame

Despite this, the layout sometimes reflows when:

  • Zoom factor changes (inner width updates)

  • Scrollbar updates the inner container x

  • Replicators rebuild their children

It looks like a layout pass is still reacting to child size/position changes, even though the containers involved are set to Ignore.

Question:
Is there a known issue or rule with Panel UI / Container COMPs where layout recalculates based on child width even when Parent Alignment is Ignore?
Is there a recommended “viewport + canvas” pattern for Panel UI scrolling that avoids this entirely?

Any insight into how the layout engine decides when to reflow would be hugely appreciated.

Thanks!

Hi @martinlym,

could you provide a working example that mirrors your setup in a simplified manner and still shows the issues you are experiencing?

There are certainly cases where this could happen and often this comes back to recursions or similar but without seeing the actual structure of your project, this is hard to give advise on.

cheers
Markus