2012-02-18 1 views
2

ではありません。そのビューが画面全体に表示される理由を理解できません。 ViewController.mUIViewのサイズは、

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

でAppDelegateで

...

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

を提出..

私はアプリを実行すると、画面が完全に緑ではなく、緑の正方形だけを持つ。 ここで何が間違っていますか?

+0

ここで 'self.view = view'を設定していますか? –

+0

あなたが聞いたことを理解できません。 – OhDoh

+0

2番目のコードスニペットはどこですか? 'loadView'メソッドで?しかし、リチャードJ.ロス3世が示唆したように、おそらくあなたは(例えば)[self.window addSubview:view]; –

答えて

5

誤った行はここにある:あなたがルートコントローラであるUIViewControllerのビューを設定すると

self.view = view; 

、画面を埋めるために保証されています。代わりに、サブビューとして追加:

[self.view addSubview:view]; 

そして、あなたは問題ないはずです。

+0

[self.view addSubview:view]に変更するとアプリケーションがクラッシュし、 gdbの "frame"エラー – OhDoh

0

ビューコントローラは自動的にルートビュー(self.view)のサイズを管理します。小さいサイズで初期化しても、後で画面いっぱいにサイズが変更されます。このサイズ変更は、インターフェイスの向きが変わったときにも便利です(回答this questionを参照)。

リチャードの回答として示唆されているように、緑色のビューをサブビューとしてコントローラのルートビューに追加できます。あなたがアクセスしようとすると、ルートビューがまだ存在していない可能性があります。以下を試してください:

- (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]; 
} 
関連する問題