3

看来我可能误会了什么。我有一个 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}}我也无法解释的框架。

谁能告诉我到底发生了什么?我尝试设置自动调整大小的蒙版等,但它并没有真正改变任何东西。我有点卡住了。

4

1 回答 1

2

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

于 2012-06-08T19:19:41.977 回答