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 :(得分:0)
这可能是由视图的autoresizingMask引起的,它的目的是调整大小以更改它的超级视图。
答案 1 :(得分:0)
哪种视图控制器是SomeViewController
?我认为可能发生的一件事是SomeViewController
可能包含一些额外的内容,例如UINavigationController
的顶部栏,有时会自动增加大小。但是你正在做的是通过将一个视图控制器的视图添加到另一个视图控制器来违反HIG。 UIViewController
设计为屏幕的完整视图或属于专用视图控制器,例如UITabBarController
,UINavigationController
或UISplitViewController
。因此,someViewController
无法按预期运行,也无法接收viewDidLoad
等来电。因此,如果您确定没有设置自动调整属性,我建议使用UIView
而不是UIViewController
。