2

我正在为 iPad 构建一个涉及以编程方式添加 UIViews 的应用程序。当视图加载时,我可以添加其他 UIViews 就好了。但是,在加载 UI 之后,当我尝试以编程方式创建 UIView 并将其添加到角落时,其他 UIView 会移动并且视图不会重绘(因此其他 UIView 和小部件的旧位置/大小是也画了)。

关于我应该做些什么来避免这个问题的任何想法?

编辑:调整给我问题的面板大小的代码位于按下按钮时调用的函数中。该函数的核心是这样的:

CGRect fooPanelFrame = CGRectMake(fBasePanelWidth,
                                  50,
                                  fBasePanelWidth,
                                  panelHeight);

[_fooPanelView setFrame:fooPanelFrame];

其中 'fooPanelView' 是 UIView 类型。这是唯一一个在所有内容构建完成后都会调整大小的。其他 UIView 在“viewDidLayoutSubViews”方法中被调整大小(以类似的方式)。

编辑:这是 UI 之前的样子:

在调整帧大小之前

这是重新调整中央框架大小后的样子:

调整框架大小后

蓝色只是根 UIView 的颜色。

需要注意的另一点是,当我记录我正在更改的视图的大小时,在调整大小之前,这些值是我所期望的,但不是之后。在我的测试中,我故意将其设置为全部 20 秒,但返回的帧的值不是那个。我想知道这是否意味着我需要更改超级视图中的某些设置...

4

1 回答 1

0

所以这似乎是由于我自己的愚蠢。当我按下按钮时,我没有意识到 viewDidLayoutSubviews(...) 方法会再次被调用(我的大小调整是在按钮事件处理程序调用的函数中完成的)。对于 UIView 调整大小的情况,是否有任何设计模式?现在,如果视图已绘制并且我只是在调整大小,我将退出 viewDidLayoutSubviews(...) 方法。

于 2013-07-09T18:13:51.310 回答