2011-02-08 11 views
0
SomeViewController *someVC = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil]; 
    self.someViewController = someVC; 
    [someVC release]; 


    NSLog(@"height before added as subview: %f", self.someViewController.view.frame.size.height); 
    [self.containerView addSubview:self.someViewController.view]; 
    NSLog(@"height AFTER added as subview: %f", self.someViewController.view.frame.size.height); 

    // height before added as subview: 480.000000 
    // height AFTER added as subview: 540.000000 

可能な説明はありますか? someViewControllerのビューには自動サイズ変更プロパティが設定されていません。また、containerViewはそのサブビューを自動サイズ変更しません。サブビューとしてフレームを追加するだけでフレームが変化する原因は何ですか?ビューコントローラのビューをサブビューとして追加すると、フレームが変更されますか?

これにさらに謎は、それが唯一のsomeViewControllerのビューの高さは、これは、ビューのautoresizingMaskによって引き起こされる可能性が> = 480

+0

これは謎です...フレームを境界に置き換えるとどうなりますか? – jakev

答えて

0

どのような種類の表示コントローラがSomeViewControllerですか?私が考えていることは、SomeViewControllerには、UINavigationControllerのトップバーのようないくつかの余分なコンテンツが含まれていることがあり、自動的にサイズが増加することがあります。しかし、あなたがやっていることは、あるビューコントローラのビューを別のビューコントローラに追加することによってHIGに違反していることです。 UIViewControllerは、画面全体を表示するか、またはUITabBarController,UINavigationController、またはUISplitViewControllerなどの特殊なビューコントローラに属するように設計されています。その結果、someViewControllerは期待どおりに機能せず、viewDidLoadなどのコールを受信しません。したがって、自動サイズ調整のプロパティが設定されていないと確信できる場合は、UIViewControllerの代わりにUIViewを使用することをお勧めします。

+0

これは私がやったことです。しかし、前者のシナリオではviewDidLoadが呼び出されないのはなぜですか? – sol

+0

'viewDidLoad'と他の同様のメソッドが呼び出されない理由は、それらのメッセージがサブビューコントローラに転送されないためです。アップルは 'UINavigationController'のようなコントローラを設計し、適切なメッセージをすべてView Controllerに転送しました。コントローラのビューだけを別のビューに追加しようとすると、もはや発生しません。 – Joe

0

に設定した場合、それが目的だということですが、それスーパーだの変化に大きさを調整することですビュー。

関連する問題