Determine size of programmatic layout

I am designing a tool to create an app programmatically using uifigure and its various containers. I specifically plan to use uigridlayout in order to take advantage of its automatic sizing using 'fit'. After the figure is laid out, I would like to resize the uifigure to the size of the enclosed layout.
  • This would be trivial if the uigridlayout had a 'Position' property.
  • I can look at the 'Position' property of all the widgets contained in the uigridlayout to calculate the maximum width and height, but note that those values are only relative to the enclosing layout (the uigridlayout). If I nest a uigridlayout inside another uigridlayout, I have to perform this operation recursively to find the overall dimensions.
  • I assume the same holds true for any nested containers
Is there an easier way?

3 Comments

The problem, as I see it, is that given a uigridlayout, I can determine its size by examining the Positions of its children and applying the layout's RowSpacing and ColumnSpacing, but I can't determine it's Position (x,y). That means if I have a uigridlayout nested inside another uigridlayout, I cannot even determine the outer layout's size without reproducing (or trying to reproduce) all of the uigridlayout's resizing logic.
I am also interested in this issue. I am working on a UI. I organized uilabel's and uieditfield's into uipanel's, arranging them using a uigridlayout whose parent is the uipanel. I would like that panel to automatically resize to fit the entire contents of the uigridlayout, but it does not appear that this is supported.
I went ahead and wrote a function to calculate the size of the uigridlayout so I could set the size of the parent. I am not sure how robust it is, since it is tailored to the widgets I needed. I see no reason that a uigridlayout should not have a read-only Position property -- maybe someday!
There are still some problems with this approach that are apparently unsolvable. Specifically, there is no way to determine when the layout is finalized so the reported positions are stable. I have used 'drawnow' in the past to wait for drawing to complete, but in this case, that is not enough. I submitted a ticket for that, and it is now on the developers' radar.

Sign in to comment.

 Accepted Answer

Pratheek
Pratheek on 23 Feb 2024
Hi Norton,
The Position property has been added to the uigridlayout in MATLAB R2022b, which simplifies the process of resizing the uifigure to match the size of the enclosed layout.
Please find the documentation link below:

More Answers (0)

Categories

Find more on Develop Apps Programmatically in Help Center and File Exchange

Products

Release

R2021b

Asked:

on 29 Nov 2021

Answered:

on 23 Feb 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!