2012-02-18 55 views
2

我无法弄清楚为什么这个视图占据了整个屏幕。UIView的大小不像预期的那样是

在AppDelegate的文件

...

self.viewController = [[[ViewController alloc]init]autorelease]; 
[self.window setRootViewController:self.viewController]; 
self.window.backgroundColor = [UIColor whiteColor]; 

..

在ViewController.m

UIView *view = [[UIView alloc]initWithFrame:CGRectMake(30, 30, 30, 30)]; 
[view setBackgroundColor:[UIColor greenColor]]; 
self.view = view; 

当我运行应用程序的屏幕完全是绿色的,而不是只有一个绿色的正方形。 这里有什么问题?

+0

您在哪里设置'self.view = view'? – 2012-02-18 14:22:51

+0

我不明白你问什么。 – OhDoh 2012-02-18 14:28:37

+0

你在哪里第二段代码?在'loadView'方法中?但正如Richard J. Ross III所建议的,也许你需要使用(例如)'[self.window addSubview:view];' – 2012-02-18 14:33:20

回答

5

错误路线是在这里:

self.view = view; 

如果设置了UIViewController即根控制器的视图,它是保证充满整个屏幕。相反,将其添加为子视图:

[self.view addSubview:view]; 

而且你应该没问题。

+0

当我更改为[self.view addSubview:查看]应用程序崩溃,我得到“无法恢复先前选择框架“错误在gdb – OhDoh 2012-02-18 14:28:13

0

视图控制器会自动管理其根视图的大小(self.view),所以即使您使用较小的大小对其进行初始化,它稍后将调整大小以填充屏幕。当界面方向改变时,方便地调整大小也会发生(请参阅答案this question)。

正如Richard的回答所建议的,您可以将您的绿色视图作为子视图添加到控制器的根视图。您获得的崩溃可能是因为当您尝试访问它时,根视图不存在。请尝试以下操作:

- (void) loadView 
{ 
    [super loadView]; // creates the root view 

    UIView* subView = [[UIView alloc] initWithFrame:CGRectMake(30, 30, 30, 30)]; 
    [subView setBackgroundColor:[UIColor greenColor]]; 
    // because you don't set any autoresizingMask, subView will stay the same size 

    [self.view addSubview:subView]; 
} 
相关问题