I created a pretty complex ScreenGUI, with several different elements. I wanted to have an interface perfectly scaled on all computer monitors. The solution I found for this, is an interesting plugin that helped me convert all UDim2 values to Scale, and automatically added UIAspectRatioContraints for all elements of the GUI. Seemed to work perfectly, the interface preview looks perfect on all monitors. I also added a UIScale instance, parented to the GUI’s Frame (background frame, all other interface elements are inside that Frame), and set it to 0.75. Again, the preview looks perfect.
So what’s the problem? Well, when I try to change the size of things… that’s when it gets totally messed up. The main issue is changing the CanvasSize of ScrollingFrames. Normally, a CanvasSize.Y.Scale <= 1 would mean the ScrollBar shouldn’t be shown, but in this case, it looks like this:
CanvasSize.Y.Scale = 1
CanvasSize.Y.Scale = 0.25 -> ScrollBar not shown
CanvasSize.Y.Scale = 0.75 ->
That looks totally random… turns out 0.34 is the max CanvasSize, anything after that is considered bigger than the Canvas and the ScrollBar is shown.
I also tried changing the CanvasSize via LocalScript, using the AbsoluteContentSize property of the IUListLayout I am using for the ScrollingFrame… and that also isn’t working as it should.
Another problem is the ScrollBarSize looks much bigger on some monitors and covers other GUI elements.
Another problem is a progress bar with curved edges looked like this:
So I had to just use normal Frames, with no curved edges, and now it works fine.
In short, it is impossible for me to properly change the appearance of GUI elements, and make them functional for the project I have in mind. Not if I want an interface scaling perfectly on all monitor resolutions.
I tried removing all UIAspectRatioContraints, then only some… I can’t seem to find a good solution for this.