2012-12-19 7 views
6

私は画面遷移に関する質問があります。トランジットへpresentViewControllerはview.frameを変更しますか?

画面、私はよくpresentViewControllerメソッドを使用します。

NextViewController *nextViewController = [[NextViewController alloc] init]; 
nextViewController.view.frame = CGRectMake(10, 10, 200, 400);  
[self presentViewController:nextViewController animated:YES completion:nil]; 

ただし、実装したview.frame設定は適用されません。次のコード

は正常に動作します。

NextViewController *nextViewController = [[NextViewController alloc] init]; 
[self presentViewController:nextViewController animated:YES completion:nil]; 
nextViewController.view.frame = CGRectMake(10, 10, 200, 400); 

これらのコードの違いは何ですか? view.frameはpresentViewControllerメソッドで再定義されていますか?

ありがとうございました。

答えて

5
NextViewController *nextViewController = [[NextViewController alloc] init]; 
nextViewController.view.frame = CGRectMake(10, 10, 200, 400);  
[self presentViewController:nextViewController animated:YES completion:nil]; 

まだ作成されていないnextViewControllerのビューを設定しているため、上記のコードは機能しません。あなたが最初のビューコントローラをロードし、ロードされたビューのフレームを変更するあなたの次のコードではそう

========================= EDIT ==================== =======

あなたがIBOutletとあなたのビューをバインドし

- (void) viewDidAppear:(BOOL)animated 
{ 
     //set the frame here 
     self.myView.frame = CGRectMake(10, 10, 200, 400); 
} 

で、それは:)

+0

しかし、次のように、NextViewControllerでview.frameを設定することはできません。 [super viewDidLoad]; self.view.frame = CGRectMake(10、10、200、400); – akiniwa

+0

あなたが間違っていない場合、私はviewDidLoad関数でフレームを設定していますか? –

+0

私は両方の方法を試しました。 rootViewControllerの "nextViewController.view.frame"、 "[super viewDidLoad];"の後の "self.view.frame" nextViewControllerで – akiniwa

1

self.viewは、ビューコントローラを提示する前に作成されていません。

すなわち)nextViewController.view.frameは前に有効ではありません[自己presentViewController:nextViewControllerアニメーション:YES完了を:nilを];

0

現在のホープ直接、ビューコントローラにフレームを設定したい場合nextViewControllerを入力して、そのさまざまなプロパティを更新することができます。ビューがビューにロードされる前にそれを行うと失敗します。ビューを表示してから更新します。

関連する問題