考虑以下UIView
" MainView":
视图包含一个容器视图,而容器视图又包含一个UITableView
控制器。容器视图的y坐标从渐变条下方开始。 UITableView
包括最底部的部分页脚,其中包含' STU'标签和'图表'按钮。
加载UIView
时,以及与tableView
,MainView'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的起点远远低于预期开始的位置,就在渐变条的上方。
我调整了" shadowview"的宽度和高度。对于这个问题;通常它会是568x268,但由于这个问题,它会在屏幕底部延伸52个单位。
52个单位正好是状态栏的高度(20)+ navigationbar_in_landscape(32)。
当然我可以手动调整框架尺寸,但我不想这样做。我想知道为什么视图框架会意外地发生变化。
对于我的生活,我无法弄清楚为什么视图会突然偏移。任何帮助表示赞赏!!
答案 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
中查看此信息。但那太早了;视图尚未添加到界面中,因此尚未调整大小以适应周围环境。