Reproduction Steps
This issue is pretty critical, since it will break a lot of UI, especially UI based on frameworks such as Roact/Pract, in which you can’t define the order in which properties are set.
On macOS Montery 12.0.1, if you resize a frame while Visible is set to false and then set Visible to true, its children will not render correctly until it is resized again.
Here is a simple repro:
UIRenderRepro.rbxl (34.4 KB)
The center frame (pink) should always be sized relative to the parent, with an even 10 pixel border from the blue frame:
This repro contains a script which makes the parent frame invisible, resizes it to a random size, waits a second, and then makes it visible again for one second.
Expected Behavior
The pink frame should always have a correct size relative to the parent size
Actual Behavior
Instead, the pink size never updates its size if its parent size updated while it was invisible
Workaround
You can work around this issue if you always set a frame to be visible before you resize it. Unfortunately, I use a declarative UI engine (Pract) which does not let you define the order in which properties are set, causing a race condition where this bug only happens half the time.
Issue Area: Engine
Issue Type: Display
Impact: Very High
Frequency: Constantly
Date First Experienced: 2021-12-04 00:12:00 (-07:00)
Date Last Experienced: 2021-12-04 00:12:00 (-07:00)