2011-02-08 1 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의 뷰 높이> = 480

+0

미스터리 ... 프레임을 경계로 바꾸면 어떻게됩니까? – jakev

답변

0

어떤 종류의보기 컨트롤러가 SomeViewController입니까? 내가 생각할 수있는 한가지는 SomeViewControllerUINavigationController의 상단 막대와 같은 몇 가지 추가 콘텐츠가 포함될 수 있으며 때때로 그 크기가 자동으로 증가합니다. 하지만 당신이하고있는 일은 한 뷰 컨트롤러의 뷰를 다른 뷰 컨트롤러에 추가하여 HIG를 위반하는 것입니다. UIViewController은 화면 전체를 보거나 UITabBarController, UINavigationController 또는 UISplitViewController과 같은 특수보기 컨트롤러에 속하도록 설계되었습니다. 결과적으로 someViewController은 예상대로 작동하지 않고 viewDidLoad과 같은 전화를 수신하지 않습니다. 따라서 자동 검색 속성을 설정하지 않은 경우 UIViewController 대신 UIView을 사용하는 것이 좋습니다.

+0

이것이 결국 내가 한 일입니다. 그러나 이전 시나리오에서 viewDidLoad가 호출되지 않도록하는 것은 무엇입니까? – sol

+0

'viewDidLoad' 및 다른 유사한 메소드가 호출되지 않는 이유는 해당 메시지가 하위보기 컨트롤러로 전달되지 않기 때문입니다. Apple은 'UINavigationController'와 같은 컨트롤러를 설계하여 컨트롤러의 뷰를 더 이상 발생하지 않는 다른 뷰에 추가하려고 할 때 모든 적절한 메시지를 뷰 컨트롤러로 전달합니다. – Joe

0

이보기의 autoresizingMask 의해 야기 될 수 있고, 그것의 목적은 수퍼의 변화에 ​​크기를 조절하는 경우에만 발생한다는 것이다 전망.