在嵌入式UITableView与之交互后,为什么我的UIView框架会意外更改?

时间:2014-05-13 20:51:02

标签: ios objective-c uiview

考虑以下UIView" MainView":

enter image description here

视图包含一个容器视图,而容器视图又包含一个UITableView控制器。容器视图的y坐标从渐变条下方开始。 UITableView包括最底部的部分页脚,其中包含' STU'标签和'图表'按钮。

加载UIView时,以及与tableViewMainView's维度的任何互动都是:

  

框架:0.000000x,0.000000y,568.000000w,268.000000h

我设置了一个代理协议,以便点击tableView中的图表按钮,可以通过以下方法在MainView中为阴影效果创建一个新视图:

CGRect newFrame = self.view.frame; // self = MainView
newFrame.size.width = 100;
newFrame.size.height = 50;
UIView *backgroundShadowView = [[UIView alloc] initWithFrame:newFrame];
backgroundShadowView.backgroundColor = [UIColor blackColor];
// Do Animation

上面重要的部分是' newFrame' CGRect。出于某种原因,通过点击图表按钮与表格视图交互,甚至滚动或点击一行,self.view.frame突然有以下尺寸:

  

框架:0.000000x,52.000000y,568.000000w,268.000000h

所以阴影视图如下所示,y的起点远远低于预期开始的位置,就在渐变条的上方。

enter image description here

我调整了" shadowview"的宽度和高度。对于这个问题;通常它会是568x268,但由于这个问题,它会在屏幕底部延伸52个单位。

52个单位正好是状态栏的高度(20)+ navigationbar_in_landscape(32)。

当然我可以手动调整框架尺寸,但我不想这样做。我想知道为什么视图框架会意外地发生变化。

对于我的生活,我无法弄清楚为什么视图会突然偏移。任何帮助表示赞赏!!

1 个答案:

答案 0 :(得分:0)

两条评论。

(1)

这段代码可能总是错误的:

CGRect newFrame = self.view.frame; // self = MainView
newFrame.size.width = 100;
newFrame.size.height = 50;
UIView *backgroundShadowView = [[UIView alloc] initWithFrame:newFrame];

您肯定希望根据backgroundShadowView界限定义self.view的框架,而不是像您在第一行在这里。

(2)

self.view.frame的变化可能是虚幻的。您最初可能会在viewDidLoad中查看此信息。但那太早了;视图尚未添加到界面中,因此尚未调整大小以适应周围环境。