加载后查看框架会发生变化

时间:2012-06-08 19:16:29

标签: ios

似乎我可能误解了一些东西。我有一个全屏的iPad应用程序,没有状态栏或其他任何东西。它也总是处于横向模式,所以我不需要担心肖像。我正在使用正确的框架以编程方式创建视图,但是当视图实际加载并显示时,框架似乎不同。

以下是我用来生成视图的代码(我在下面的视图中添加了更多内容,但它们与我的问题无关):

- (void)loadView{
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024.0, 768.0)];

    backgroundImage = [[UIImageView alloc] initWithFrame:self.view.bounds];
    [backgroundImage setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    [self.view addSubview:backgroundImage];
}

在视图中确实出现了,我NSLog的self.view框架并得到{{-128, -128}, {1024, 768}}。尺寸正确但原点已经改变。只是为了看看会发生什么,我尝试用128,128的原点初始化视图 - 这产生了一个{{0, -256}, {1024, 768}}的框架,我无法解释。

谁能告诉我发生了什么事?我尝试过设置autoresize mask等等,并没有真正改变任何东西。我有点卡住了。

1 个答案:

答案 0 :(得分:2)

所有UIViews'正确的几何图形仅在viewWillAppear:方法中和之后可用。在此之前,尚未设置视图层次结构的几何图形,并且值不准确。如果您需要知道,更改,计算框架,则不应在viewWillAppear:方法之前执行此操作 的更新:
覆盖-loadView方法,使用self.view初始化UIView。如果您使用的是nib文件,则会自动为您完成,您不应该覆盖此方法。此方法无法使用实视图几何体 -viewDidLoad是设置视图层次结构的位置。您可以在此处初始化子视图并将其添加到self.view中。只要不需要多线程,您就可以执行一些较重的操作。视图几何体在此方法中也不可用 - 自动调整蒙版仍然不会在此处生效,您不能指望frame属性。
-viewWillAppear:是正确设置所有内容,调整视图大小的位置 - 如果要计算和设置其他几何图形,请使用此方法,frame属性是正确的。这里只执行轻量级操作,因为这个方法不应该阻塞主线程,它应该尽可能快地执行。
同样适用于viewDidAppear: