1

我正在运行 MATLAB 2012a,遇到一个问题,如果不采取丑陋的解决方法,我就无法完全解决。我目前正在开发一个 GUI,它将在从弹出菜单中选择一个值时调整主要图形和子 uicontrols 的高度。下面表示用于更新主图高度的代码:

% Update the figure height: [x y height width]
Position = get(handles.mainfigure, 'Position');
Position(4) = Position(4) + heightDelta;
set(handles.output, 'Position', Position)

但是,当图形的高度发生变化时,所有的 uicontrols 都会向相应的方向移动。也就是说,如果高度增加,所有孩子都向下移动,而如果高度降低,所有孩子都向上移动。这适用于单位不是“标准化”(其本身更加不稳定)的情况。

虽然我可以通过将孩子向相反方向移动相同的增量来轻松解决这个问题,但有没有办法在不影响 uicontrols 位置的情况下更改图形高度?在 GUIDE 中更改高度时不会发生此行为;相反,它只在回调事件期间出现。

使用“标准化”单位,它也会导致表格改变高度,同时向上移动一些控件和向下移动一些控件。我无法弄清楚为什么会这样。如果有人能阐明任何观点,我将不胜感激。

4

1 回答 1

1

图的孩子的位置是相对于图的左下角的。因此,如果增加图形高度,uicontrols 与图形底部的距离保持不变,因此看起来正在向下移动。

当 uicontrol 的单位被归一化时,所有的东西,包括 uicontrols 之间的空间,都会按比例拉伸,这使得上半部分的 uicontrols 看起来向上移动,而下半部分的 uicontrols 向下移动。

从定义图形对象位置的方式来看,除了更改所有 uicontrol 的位置之外,您确实无能为力。

于 2012-09-08T23:48:44.827 回答