以编程方式添加UIView,但其他视图调整大小并且有人工制品?

时间:2013-07-08 02:11:47

标签: ios objective-c user-interface

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

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

编辑:调整给我问题的面板大小的代码是在按下按钮时调用的函数。功能的核心是:

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

[_fooPanelView setFrame:fooPanelFrame];

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

编辑:这是以前用户界面的样子:

before frame resized

这就是重新调整中心框架后的样子:

after frame resized

蓝色只是根UIView的颜色。

需要注意的另一点是,当我记录我正在更改的视图的大小时,在调整大小之前,值是我期望的,但不是之后。在我的测试中,我故意将它设置为全部20秒,但框架的价值回归并非如此。我想知道这是否意味着超级视图中有一些我需要改变的设置......

1 个答案:

答案 0 :(得分:0)

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