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