AbsolutePosition property is not updating for items in a UIListLayout outside of the clipping region in a ScrollingFrame

GUI elements in a ScrollingFrame with a UIListLayout do not have their AbsolutePosition updated whenever the GUI element leaves the clipping region of the ScrollingFrame. GUI elements are, however, still rendered properly.

I expect the AbsolutePosition property to accurately represent the GUI’s position regardless of if the GUI is actually visible on the screen. I expect that a GUI element at the bottom of the list to have an AbsolutePosition that reflects being at the bottom of the list. I expect that GUI AbsolutePositions would be the same as if the UIListLayout was not present and the GUIs were manually positioned into the same location visually.

This bug is happening every time for me on WWW/production. This bug seems to have started very recently.


Repro:

The list on the left is the actual ScrollingFrame + UIListLayout. The list on the right are GUIs tied to the Y axis of the AbsolutePosition property of GUIs on the left.

UIListLayoutAbsolutePositionBugRepro.rbxl (17.6 KB)

This bug only occurs if the UIListLayout is present. I have set up the GUIs so that you can delete the UIListLayout and the GUIs will retain their position. If the UIListLayout is deleted, this bug no longer occurs.

This is an optimization that UI layouts do. Can you elaborate on your usecase for doing this?

I was using the AbsolutePosition and AbsoluteSize properties to attach 3D objects to the GUI.

This is done in three layers: ScreenGui, 3D object, and BillboardGui.

There are GUIs in the BillboardGui that are “attached” to the AbsolutePosition and AbsoluteSize of GUIs in the ScreenGui. The 3D objects are also attached to the AbsolutePosition and AbsoluteSize of GUIs in the ScreenGui.

Because of this optimization, GUIs in the BillboardGui and 3D objects were getting stuck around the top and bottom of the scrolling area. I had to stop using the UIListLayout and position the GUIs in the ScreenGui manually for AbsolutePosition to work how I need it to.