将视图控制器的视图添加为子视图会改变它的帧吗?

时间:2011-02-08 18:53:50

标签: iphone uiview uiviewcontroller frame resize

    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时才会发生。

2 个答案:

答案 0 :(得分:0)

这可能是由视图的autoresizingMask引起的,它的目的是调整大小以更改它的超级视图。

答案 1 :(得分:0)

哪种视图控制器是SomeViewController?我认为可能发生的一件事是SomeViewController可能包含一些额外的内容,例如UINavigationController的顶部栏,有时会自动增加大小。但是你正在做的是通过将一个视图控制器的视图添加到另一个视图控制器来违反HIG。 UIViewController设计为屏幕的完整视图或属于专用视图控制器,例如UITabBarControllerUINavigationControllerUISplitViewController。因此,someViewController无法按预期运行,也无法接收viewDidLoad等来电。因此,如果您确定没有设置自动调整属性,我建议使用UIView而不是UIViewController